You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:12:22