如何使用Selenium获取Chrome开发者工具网络面板中的Bearer Token?
可以通过Selenium直接获取到目标access token,主流有两种实现方案
方案1:启用Chrome性能日志捕获网络请求
Selenium原生支持开启Chrome的性能日志,你可以直接从日志中过滤出带Authorization请求头的请求,提取Bearer Token,该方案兼容性最好,Selenium 3/4版本都支持。
- 第一步:启动Chrome时添加配置,开启性能日志捕获
from selenium import webdriver from selenium.webdriver.chrome.options import Options import json chrome_options = Options() # 开启性能日志权限 chrome_options.set_capability("goog:loggingPrefs", {"performance": "ALL"}) driver = webdriver.Chrome(options=chrome_options)
- 第二步:完成你已有的登录流程后,遍历性能日志提取Token
logs = driver.get_log("performance") bearer_token = None for log in logs: log_msg = json.loads(log["message"])["message"] # 匹配能获取完整请求头的网络事件 if log_msg["method"] == "Network.requestWillBeSentExtraInfo": headers = log_msg["params"]["headers"] if "Authorization" in headers and headers["Authorization"].startswith("Bearer "): bearer_token = headers["Authorization"].split(" ")[1] break if bearer_token: print(f"成功获取Token: {bearer_token}")
补充简化方案:大部分站点的Token会同时存放在LocalStorage/SessionStorage中,你可以直接执行JS提取,比抓请求更高效,示例代码:
driver.execute_script("return localStorage.getItem('access_token')"),键名根据站点实际存储的字段调整即可。
方案2:使用Selenium 4+的CDP接口实时监听网络事件
如果你的Selenium版本在4.0以上,可以直接调用Chrome DevTools Protocol接口实时监听所有网络请求,匹配到目标Token后可以直接终止监听,性能更高。
from selenium import webdriver driver = webdriver.Chrome() # 开启Network域监听 driver.execute_cdp_cmd("Network.enable", {}) bearer_token = None # 定义请求拦截回调 def capture_token(request): global bearer_token headers = request["request"]["headers"] if "Authorization" in headers and headers["Authorization"].startswith("Bearer "): bearer_token = headers["Authorization"].split(" ")[1] # 拿到Token后关闭监听 driver.execute_cdp_cmd("Network.disable", {}) # 绑定网络请求监听事件 driver.add_cdp_listener("Network.requestWillBeSent", capture_token) # 后续执行登录操作,触发带Token的接口请求即可自动捕获
两种方案都不需要手动操作DevTools,全程可自动化执行,适配绝大多数站点的Token提取需求
内容的提问来源于stack exchange,提问作者explorer
相关产品推荐
相关产品推荐

