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

如何在无头模式下访问Undetected Chrome的代理认证弹窗?

解决Undetected Chrome无头模式下代理认证弹窗问题

代理认证弹窗属于系统级对话框,并非网页JS生成的Alert,所以Selenium的Alert API无法捕获,这是你遇到NoAlertPresentException的核心原因。以下是几种可行的解决方案:

方法1:通过Chrome扩展自动完成代理认证

创建轻量Chrome扩展,在浏览器启动时自动注入代理凭证,无头模式下也能正常工作:

步骤1:创建扩展文件

新建文件夹proxy-auth-extension,添加以下两个文件:

  1. manifest.json(扩展配置):
{
  "manifest_version": 3,
  "name": "Proxy Auto Auth",
  "version": "1.0",
  "permissions": ["proxy", "webRequest", "webRequestAuthProvider"],
  "background": {
    "service_worker": "background.js"
  },
  "host_permissions": ["<all_urls>"]
}
  1. background.js(认证逻辑):
chrome.webRequest.onAuthRequired.addListener(
  (details, callback) => {
    callback({
      authCredentials: {
        username: "你的代理用户名",
        password: "你的代理密码"
      }
    });
  },
  { urls: ["<all_urls>"] },
  ["blocking"]
);

步骤2:在代码中加载扩展

修改Python代码,添加扩展加载参数并启用无头模式:

import time
import os
from selenium.webdriver.chrome.options import Options
import undetected_chromedriver as uc

host_ip = 'X.XXX.XXX.XXX'
port = 'XXXXX'
ipCheckURL = "http://whatismyipaddress.com"
extension_path = os.path.abspath("./proxy-auth-extension")

chrome_options = Options()
chrome_options.add_argument(f'--proxy-server=http://{host_ip}:{port}')
chrome_options.add_argument(f'--load-extension={extension_path}')
# Chrome 112+ 推荐使用新无头模式
chrome_options.add_argument('--headless=new')

ucdriver = uc.Chrome(options=chrome_options, use_subprocess=True)
ucdriver.get(ipCheckURL)
time.sleep(5)
ucdriver.quit()

方法2:使用Selenium Wire接管代理认证

Selenium Wire可在请求层面处理代理认证,避免弹出系统对话框,结合undetected-chromedriver使用:

import time
from selenium.webdriver.chrome.options import Options
from seleniumwire import webdriver

username = "你的代理用户名"
password = "你的代理密码"
host_ip = 'X.XXX.XXX.XXX'
port = 'XXXXX'
ipCheckURL = "http://whatismyipaddress.com"

chrome_options = Options()
chrome_options.add_argument('--headless=new')

seleniumwire_options = {
    'proxy': {
        'http': f'http://{username}:{password}@{host_ip}:{port}',
        'https': f'https://{username}:{password}@{host_ip}:{port}',
        'no_proxy': 'localhost,127.0.0.1'
    },
    'disable_encoding': True
}

# 启用undetected-chromedriver模式
driver = webdriver.Chrome(
    options=chrome_options,
    seleniumwire_options=seleniumwire_options,
    uc=True
)

driver.get(ipCheckURL)
time.sleep(5)
driver.quit()

方法3:Chrome启动参数配置(部分代理有效)

部分代理支持通过Chrome认证白名单参数传递凭证,尝试以下配置:

import time
from selenium.webdriver.chrome.options import Options
import undetected_chromedriver as uc

username = "你的代理用户名"
password = "你的代理密码"
host_ip = 'X.XXX.XXX.XXX'
port = 'XXXXX'
ipCheckURL = "http://whatismyipaddress.com"

chrome_options = Options()
chrome_options.add_argument(f'--proxy-server=http://{host_ip}:{port}')
# 指定需要认证的服务器白名单
chrome_options.add_argument(f'--auth-server-whitelist={host_ip}')
# 注入认证凭证(部分Chrome版本支持)
chrome_options.add_argument(f'--proxy-auth={username}:{password}')
chrome_options.add_argument('--headless=new')

ucdriver = uc.Chrome(options=chrome_options, use_subprocess=True)
ucdriver.get(ipCheckURL)
time.sleep(5)
ucdriver.quit()

注意:该方法兼容性取决于Chrome版本和代理类型,部分场景下可能失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:48:35