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

如何在Headless模式下使用带代理认证的Selenium(Chrome)

在Chrome Headless模式下使用带账号密码认证的代理(Python实现)

以下是几个可行的解决方案,针对你提到的扩展方法仅在非无头模式生效的问题:

方案1:使用PAC脚本注入代理认证

PAC(Proxy Auto-Configuration)脚本可直接嵌入代理认证信息,Chrome无头模式支持加载本地PAC文件。

  1. 创建本地PAC脚本(命名为proxy_auth.pac):
function FindProxyForURL(url, host) {
  // 替换为实际代理地址和端口
  var proxy = "PROXY your-proxy-host:port";
  // 替换为实际代理账号密码
  var auth = "Basic " + btoa("your-username:your-password");
  header("Proxy-Authorization", auth);
  return proxy;
}
  1. 在Selenium中配置Chrome选项:
import os
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--headless=new")
# 指定PAC文件的本地绝对路径(需用file://协议)
chrome_options.add_argument(f"--proxy-pac-url=file://{os.path.abspath('proxy_auth.pac')}")

driver = webdriver.Chrome(options=chrome_options)
driver.get("https://example.com")

方案2:使用Pyppeteer直接设置代理认证

Pyppeteer是Chrome DevTools协议的Python封装,原生支持无头模式下设置代理认证,无需依赖扩展。

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch({
        'headless': True,
        'args': [
            # 替换为实际代理地址和端口
            '--proxy-server=your-proxy-host:port'
        ]
    })
    page = await browser.newPage()
    # 设置代理账号密码
    await page.authenticate({
        'username': 'your-username',
        'password': 'your-password'
    })
    await page.goto('https://example.com')
    print(await page.title())
    await browser.close()

asyncio.get_event_loop().run_until_complete(main())

方案3:通过Selenium调用Chrome DevTools协议注入认证

如果坚持使用Selenium,可通过Chrome DevTools协议(CDP)直接发送认证指令,绕过扩展限制。

import base64
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--headless=new")
# 指定代理地址和端口
chrome_options.add_argument("--proxy-server=your-proxy-host:port")

driver = webdriver.Chrome(options=chrome_options)
# 方式1:通过设置HTTP头注入认证
driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {
    'headers': {
        'Proxy-Authorization': 'Basic ' + base64.b64encode(b"your-username:your-password").decode('utf-8')
    }
})

# 方式2:直接调用认证命令(部分代理场景更稳定)
# driver.execute_cdp_cmd('Network.authenticate', {
#     'username': 'your-username',
#     'password': 'your-password'
# })

driver.get("https://example.com")

注意事项

  • 替换所有示例中的your-proxy-host:port、your-username、your-password为实际信息
  • 方案1需确保Chrome能正常访问本地PAC文件,避免路径权限问题
  • 方案3使用Network.setExtraHTTPHeaders时,需导入base64模块

内容的提问来源于stack exchange,提问作者innocent98

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:12:22