登录为图片验证时,selenium通过token直接进入页面操作
在 Selenium 中,如果你想在打开浏览器时携带 Token(通常是访问 API 或 Web 服务的认证凭据),你可以通过以下几种方式实现,具体取决于你的应用场景。以下是常见的几种方法:
1. 通过 URL 传递 Token(适用于支持 Token 的 Web 服务)
如果目标网页支持通过 URL 参数传递 Token(例如通过查询参数 ?token=your_token
),你可以直接在打开浏览器时构造带有 Token 的 URL。
示例代码(Python):
from selenium import webdrivertoken = "your_token_here"
url = f"https://example.com/dashboard?token={token}"driver = webdriver.Chrome()
driver.get(url)
2. 通过请求头(Headers)携带 Token(适用于需要自定义请求头的场景)
如果网页要求在请求头中携带 Token(例如 Authorization: Bearer your_token
),Selenium 本身不支持直接设置请求头,但可以通过以下方法间接实现:
方法一:使用浏览器扩展(如 mitmproxy
或 browsermob-proxy
)
使用代理工具在请求中添加自定义请求头。这里以 browsermob-proxy
为例:
示例代码(Python):
- 安装依赖:
pip install browsermob-proxy selenium
- Python 示例代码:
from browsermobproxy import Serverfrom selenium import webdriverimport os# 启动 browsermob-proxy 服务器server = Server(path="path_to_browsermob-proxy", options={'port': 8080})server.start()proxy = server.create_proxy()# 添加请求头proxy.new_har("example.com", options={'captureHeaders': True, 'captureContent': True})proxy.add_header("Authorization", "Bearer your_token")# 配置浏览器使用代理chrome_options = webdriver.ChromeOptions()chrome_options.add_argument(f'--proxy-server={proxy.proxy}')driver = webdriver.Chrome(options=chrome_options)driver.get("https://example.com/dashboard")
3. 通过 JavaScript 注入 Token(适用于前端需要手动设置 Token 的场景)
如果 Token 是前端 JavaScript 代码设置的(例如通过 localStorage
或 sessionStorage
),你可以通过 Selenium 执行 JavaScript 注入 Token。
示例代码(Python):
from selenium import webdriverdriver = webdriver.Chrome()
driver.get("https://example.com/dashboard")# 使用 JavaScript 设置 Token
token = "your_token_here"
driver.execute_script(f"localStorage.setItem('token', '{token}');")
4. 使用 Cookie 携带 Token(适用于 Token 存储在 Cookie 中的场景)
如果 Token 是通过 Cookie 传递的,你可以通过 Selenium 设置 Cookie。
示例代码(Python):
from selenium import webdriverdriver = webdriver.Chrome()
driver.get("https://example.com")# 添加 Cookie
token = "your_token_here"
driver.add_cookie({"name": "token","value": token,"domain": "example.com", # 替换为目标域名"path": "/"
})# 刷新页面以应用 Cookie
driver.get("https://example.com/dashboard")
5. 通过 WebDriver 的 execute_cdp_cmd
方法设置 Token(适用于支持 CDP 协议的浏览器)
Chrome DevTools Protocol (CDP) 提供了更底层的接口,可以通过 execute_cdp_cmd
设置请求头。
示例代码(Python):
from selenium import webdriveroptions = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=options)# 使用 CDP 设置请求头
driver.execute_cdp_cmd("Network.enable", {})
driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {"headers": {"Authorization": "Bearer your_token"}
})driver.get("https://example.com/dashboard")