【Selenium 小知识】获取 token 和 cookies

使用Selenium获取网页token和cookies
本文介绍了如何利用Python的Selenium库进行自动化测试,详细讲解了如何获取网页的token和cookies值,以实现更高效和精确的软件测试。

使用 selenium 获取网址的 token 和 cookies

调用 selenium 库,启动浏览器

impor time
from icecream import ic
from selenium import webdriver
from selenium.webdriver.common.by import By


driver = webdriver.Chrome()
# 隐式等待30s
driver.set_page_load_timeout(30)
# 窗口最大化
driver.maximize_window()

# 获取网址
driver.get("需要获取数据的网址")
time.sleep(3)
# 输入用户名密码
driver.find_element(By.ID, 'username').send_keys('用户名')
driver.find_element(By.ID, 'password').send_keys('密码')

获取 token 值

# 获取 token 值
token = driver.execute_script('return localStorage.getItem("AuthToken");')
# ic(f"\n{token}")

# 保持至本地txt文件
with open("token.txt", "w") as t:
    t.write(f"{token}")
    t.close()

获取 cookies 值

# 获取 cookies
dict_cookies = driver.get_cookies()
# ic(json.dumps(dict_cookies))

# 保存至 json 文件
with open("cookies.json", "w") as c:
    c.write(f"{dict_cookies}")

# 将获取的 cookies 值并保持至本地txt文件
cookies = {}
for s in dict_cookies:
    cookies[s['name']] = s['value']
<think>我们正在讨论如何使用Selenium获取网页中的token。根据引用内容,我们可以总结几种方法:1.使用selenium-wire库(引用[3]):它可以捕获网络请求,从而从请求头中提取token。2.通过执行JavaScript从本地存储(LocalStorage/SessionStorage)中获取(引用[4])。3.从Cookie中获取(引用[4])。具体步骤:方法一:使用selenium-wire-安装selenium-wire:`pipinstallselenium-wire`-在代码中,使用`webdriver`从`seleniumwire`导入,然后启动浏览器。-访问目标网页,然后通过`driver.requests`获取所有请求,查找特定请求(如登录后的请求)的头部,提取token。方法二:通过JavaScript获取本地存储中的token-使用标准Selenium的`execute_script`方法执行JavaScript代码来获取LocalStorage或SessionStorage中的token。-例如:`token=driver.execute_script("returnwindow.localStorage.getItem('tokenKey');")`方法三:从Cookie中获取-使用Selenium的`get_cookies()`方法获取所有cookies,然后遍历查找包含token的cookie。-或者使用`get_cookie(name)`直接获取指定名称的cookie。注意:具体使用哪种方法取决于token在网页中的存储位置方式。下面我们分别给出三种方法的代码示例:方法一示例(使用selenium-wire):```pythonfromseleniumwireimportwebdriver#创建WebDriver实例driver=webdriver.Chrome()#访问目标URLdriver.get('https://www.example.com/login')#进行登录操作(根据实际网页填写用户名密码等)#...这里省略登录步骤#获取所有请求requests=driver.requests#遍历请求,查找包含token的请求头forrequestinrequests:ifrequest.url=='https://www.example.com/api/data':#替换成实际获取token的URL#获取请求头中的tokentoken=request.headers.get('Authorization')#或者根据实际headerkey,如'X-API-Token'iftoken:print(f"Tokenfound:{token}")breakdriver.quit()```方法二示例(从LocalStorage获取):```pythonfromseleniumimportwebdriverdriver=webdriver.Chrome()driver.get('https://www.example.com/login')#登录操作(同上省略)#假设token存储在LocalStorage中,键名为'token'token=driver.execute_script("returnwindow.localStorage.getItem('token');")iftoken:print(f"TokenfromLocalStorage:{token}")driver.quit()```方法三示例(从Cookie获取):```pythonfromseleniumimportwebdriverdriver=webdriver.Chrome()driver.get('https://www.example.com/login')#登录操作(同上省略)#获取名为'token'的cookiecookie_token=driver.get_cookie('token')ifcookie_token:token=cookie_token['value']print(f"TokenfromCookie:{token}")driver.quit()```注意事项:1.使用selenium-wire时,注意它可能会捕获大量请求,需要根据URL或特征筛选。2.从LocalStorage或Cookie中获取需要知道存储token的键名。3.有些token可能存储在SessionStorage中,方法二只需将`localStorage`换成`sessionStorage`即可。根据引用[2],使用Selenium获取token的关键在于知道token存储的位置(请求头、存储对象或Cookie)以及如何提取。如果以上方法都无法获取,可能需要分析网页源码,查看token是否直接嵌入在HTML中(例如某个元素的属性或文本),然后通过Selenium定位元素获取。例如,如果token在某个元素的`data-token`属性中:```pythonelement=driver.find_element_by_id('token-element')token=element.get_attribute('data-token')```综上所述,请根据实际网页情况选择合适的方法。§§相关问题§§1.如何确定网页中的token存储在哪里(LocalStorage、Cookie还是请求头)?2.使用selenium-wire时,如何只捕获特定的请求以提高效率?3.如何确保在页面加载完成后获取token,避免因为页面未加载完成而获取不到?</think>### 使用Selenium获取网页Token的完整指南 在网页自动化中获取Token主要有三种方法,具体选择取决于Token的存储位置网页特性: #### 方法一:通过请求头捕获(推荐) 使用`selenium-wire`扩展包捕获网络请求头: ```python from seleniumwire import webdriver driver = webdriver.Chrome() driver.get("https://目标网站.com/login") # 执行登录操作(输入账号密码等) driver.find_element("id", "username").send_keys("your_user") driver.find_element("id", "password").send_keys("your_pass") driver.find_element("id", "login-btn").click() # 捕获API请求头中的Token for request in driver.requests: if request.url == "https://目标网站.com/api/auth": # 替换为实际API地址 token = request.headers.get("Authorization") or request.headers.get("X-API-Token") if token: print(f"获取到的Token: {token}") break driver.quit() ``` **优点**:直接获取接口返回的原始Token[^3] **注意**:需安装`pip install selenium-wire` --- #### 方法二:从本地存储获取Token存储在`localStorage`或`sessionStorage`时: ```python from selenium import webdriver driver = webdriver.Chrome() driver.get("https://目标网站.com") # 通过JavaScript获取存储的Token token = driver.execute_script(""" return window.localStorage.getItem('authToken') || window.sessionStorage.getItem('sessionToken'); """) if token: print(f"从本地存储获取Token: {token}") else: print("未找到存储的Token") ``` --- #### 方法三:从Cookie获取 ```python from selenium import webdriver driver = webdriver.Chrome() driver.get("https://目标网站.com/login") # ...执行登录操作... # 获取所有Cookie cookies = driver.get_cookies() token_cookie = next((c for c in cookies if c['name'] == 'auth_token'), None) if token_cookie: print(f"从Cookie获取Token: {token_cookie['value']}") ``` --- ### 关键注意事项 1. **Token位置判断** 使用浏览器开发者工具检查: - 网络请求 → Headers标签页(方法一) - Application → Local Storage(方法二) - Application → Cookies(方法三) 2. **等待机制** 添加显式等待确保元素加载完成: ```python from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC WebDriverWait(driver, 10).until( EC.presence_of_element_located(("id", "login-btn")) ) ``` 3. **动态内容处理** 对于单页应用(SPA),可能需要触发特定操作才能生成Token: ```python driver.find_element("id", "fetch-data-btn").click() # 触发Token生成 ``` 4. **安全Token处理** 敏感Token应加密存储,避免硬编码在代码中。 --- ### 常见问题解决 - **获取不到Token**:检查是否触发登录流程,添加页面加载等待时间 - **HTTPS证书问题**:启动浏览器时添加`--ignore-certificate-errors`参数 - **无头模式**:部分网站限制无头浏览器,需添加正常User-Agent ```python options = webdriver.ChromeOptions() options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64)") ``` 通过以上方法,您应该能成功获取网页中的Token。实际选择取决于目标网站的具体实现[^2][^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Warolitbos

如果有帮助,请我喝咖啡!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值