使用Chrome扩展程序解决undetected_chromedriver代理用户名和密码认证问题

解决undetected_chromedriver设置代理地址池需要用户和密码,用传统的add_argument(f’–proxy-server={proxy}'),proxy包含用户和密码会报错的一系列问题。

问题背景

在使用undetected_chromedriver进行自动化测试时,当需要配置带用户密码的代理池时,传统方法直接使用add_argument(f'--proxy-server={proxy}')会遇到以下问题
# 传统错误写法示例
proxy = "user:password@proxy.domain.com:8888"
driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'Proxy-Authorization': 'Basic' + auth}})

1.Chrome浏览器会弹出认证弹窗阻断自动化流程
2.代理凭证拼接在URL中会导致连接失败
3.CDP协议直接设置认证头存在兼容性问题

核心解决方案

通过创建Chrome扩展程序实现代理认证,绕过浏览器原生认证机制。该方案具有以下优势:

✅ 完全模拟人工代理配置行为
✅ 支持动态轮换代理池
✅ 避免认证信息暴露在命令行参数中
✅ 兼容最新版uc.Chrome驱动

实现步骤详解

1.在你项目代码同文件夹下新建一个文件夹Proxies/s585.kdltps.com(自己代理域名)

your_project/
├── Proxies/
│   └── s585.kdltps.com/  # 代理服务商域名
└── extension.py

2.复制extension.py到自己代码同文件夹下

#extension.py名字和我一样哦
import os
def proxies(username, password, endpoint, port,path):
    try:
        os.mkdir(path)
    except FileExistsError:
        pass
    manifest_json = """
    {
        "version": "1.0.0",
        "manifest_version": 2,
        "name": "Proxies",
        "permissions": [
            "proxy",
            "tabs",
            "unlimitedStorage",
            "storage",
            "<all_urls>",
            "webRequest",
            "webRequestBlocking"
        ],
        "background": {
            "scripts": ["background.js"]
        },
        "minimum_chrome_version":"22.0.0"
    }
    """

    background_js = """
    var config = {
            mode: "fixed_servers",
            rules: {
            singleProxy: {
                scheme: "http",
                host: "%s",
                port: parseInt(%s)
            },
            bypassList: ["localhost"]
            }
        };

    chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});

    function callbackFn(details) {
        return {
            authCredentials: {
                username: "%s",
                password: "%s"
            }
        };
    }

    chrome.webRequest.onAuthRequired.addListener(
                callbackFn,
                {urls: ["<all_urls>"]},
                ['blocking']
    );
    """ % (endpoint, port, username, password)

    with open(path+"\\manifest.json", 'w') as m_file:
        m_file.write(manifest_json)
    with open(path+"\\background.js", 'w') as b_file:
        b_file.write(background_js)
    print(path+"\\manifest.json")

3.将自己代码undetected_chromedrive使用代理代码修改为:

import undetected_chromedriver as uc
from extension import proxies
from webdriver_manager.chrome import ChromeDriverManager

ip = "s585.kdltps.com"# 代理地址
port = "15818"# 端口
username = "t140455071...." #用户名字
password = "6u...." #密码
proxies(username, password, ip, int(port), script_address + '\\Proxies\\' + ip)
options.add_argument('--load-extension=' + script_address + '\\Proxies\\' + ip)
driver = uc.Chrome(executable_path=ChromeDriverManager().install(), options=options)

login_url = 'http://httpbin.org/ip'#查看代理ip
driver.get(login_url)

方案优势总结

1.完全认证隔离
每个代理配置生成独立扩展目录,避免凭证串用问题

2.动态代理池支持
通过扩展生成器实现代理配置热加载

3.完美兼容uc.Chrome
遵循undetected_chromedriver的最佳实践方案

4.零侵入式改造
保持原有代码结构,仅增加扩展加载逻辑

关键词说明

(1)undetected_chromedriver:使用最新v3.5.5以上版本确保扩展兼容性
(2)代理池:建议配合Redis实现动态IP轮换机制
(3)uc.Chrome:注意保持浏览器版本与驱动匹配
(4)Chrome扩展程序:需启用开发者模式加载本地扩展

																			@本本熊
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值