如何用Python+Selenium DevTools实现Basic Authentication认证
使用Selenium DevTools API实现Basic Authentication(Python版本)
完整实现代码
from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager import base64 def setup_basic_auth(): # 初始化ChromeDriver driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver.maximize_window() driver.implicitly_wait(30) # 配置认证信息 username = "admin" password = "admin" # 启用DevTools会话 dev_tools = driver.devtools dev_tools.create_session() # 启用Network域 dev_tools.send("Network.enable", { "maxTotalBufferSize": 100000, "maxResourceBufferSize": 100000, "maxPostDataSize": 100000 }) # 生成Basic Auth的Authorization头 auth_str = f"{username}:{password}" encoded_auth = base64.b64encode(auth_str.encode()).decode("utf-8") headers = {"Authorization": f"Basic {encoded_auth}"} # 设置额外HTTP请求头 dev_tools.send("Network.setExtraHTTPHeaders", {"headers": headers}) # 访问需要认证的页面 driver.get("https://the-internet.herokuapp.com/basic_auth") # 后续操作示例,按需保留 # print(driver.page_source) # driver.quit() if __name__ == "__main__": setup_basic_auth()
关键步骤说明
- DevTools会话初始化:通过
driver.devtools.create_session()建立与浏览器DevTools的通信通道 - Network域启用:调用
Network.enable指令,开启网络请求的监控与修改权限 - 认证头生成:将
用户名:密码字符串做Base64编码,拼接成标准的Basic <编码字符串>格式的Authorization请求头 - 注入请求头:通过
Network.setExtraHTTPHeaders把认证头附加到后续所有HTTP请求中,实现自动认证
你原有代码的问题
你之前的get_url_with_authentication方法存在逻辑错误:
- 错误地将Base64编码后的字符串拼接到URL末尾,不符合Basic Auth的规范
- 仍保留了
user:password@url的旧格式,这正是你需要替换的方案
正确的做法是通过DevTools在请求级别注入Authorization头,而非修改URL结构。
内容的提问来源于stack exchange,提问作者turtelian
相关产品推荐
相关产品推荐

