如何用Selenium获取页面调用REST API的Bearer Token请求头?
使用Selenium获取API请求头中的Bearer Token
核心思路
通过Selenium结合Chrome DevTools Protocol(CDP)监听网站的网络请求,捕获目标API的请求头,从中提取Authorization字段里的Bearer Token。
具体实现步骤(Python示例)
- 初始化带CDP支持的ChromeDriver
启动浏览器时启用Network域,用于监听网络请求:
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() # 可选:无头模式,适合后台运行 # chrome_options.add_argument("--headless=new") driver = webdriver.Chrome(options=chrome_options) # 启用Network域 driver.execute_cdp_cmd("Network.enable", {})
- 监听网络请求并提取Token
注册Network.requestWillBeSent事件的回调,过滤目标API请求,提取Authorization头:
token = None def capture_token(request_data): global token # 替换成你要监听的目标API的URL特征(比如包含"/showtimes"等关键词) target_api_keyword = "/api/v1/showtimes" if target_api_keyword in request_data["request"]["url"]: headers = request_data["request"]["headers"] if "Authorization" in headers: auth_header = headers["Authorization"] if auth_header.startswith("Bearer "): token = auth_header.split("Bearer ")[1] # 拿到Token后可以停止监听 driver.execute_cdp_cmd("Network.disable", {}) # 绑定回调函数 driver.add_cdp_listener("Network.requestWillBeSent", capture_token) # 访问目标网站,触发API请求 driver.get("https://目标影院网站地址.com") # 等待Token被捕获(可以根据实际情况加显式等待) while token is None: pass print(f"获取到的Bearer Token: {token}") # 关闭浏览器 driver.quit()
- 注意事项
- 替换代码中的
target_api_keyword和目标网站地址为实际值,确保只监听你需要的API请求,避免无效捕获。 - Token每几小时过期,需要定期重新运行脚本获取新Token,或者在脚本中加入过期检测逻辑,自动重新获取。
- 如果网站有加载延迟,建议使用Selenium的显式等待(
WebDriverWait)代替while循环,避免无效等待。
内容的提问来源于stack exchange,提问作者Kjensen
相关产品推荐
相关产品推荐

