Chrome Driver下Selenium认证代理旋转问题排查求助
推特爬虫代理轮换问题调试方案
针对你用Selenium+ChromeDriver结合Webshare免费代理时遇到的认证弹窗、无法访问推特的问题,以下是两种可靠的解决思路:
方案1:直接配置带认证的代理(推荐,无需扩展)
Chrome支持在启动参数中直接传入带用户名密码的代理,完全避免扩展认证的兼容性问题。
代码实现
from selenium import webdriver from selenium.webdriver.chrome.options import Options import random # 替换为你的Webshare代理列表,格式:http://用户名:密码@代理地址:端口 PROXIES = [ "http://webshare_user:webshare_pass@proxy1.webshare.io:80", "http://webshare_user:webshare_pass@proxy2.webshare.io:80", # 可添加更多代理 ] def get_random_proxy(): return random.choice(PROXIES) def init_driver(): chrome_options = Options() proxy = get_random_proxy() chrome_options.add_argument(f'--proxy-server={proxy}') # 绕过推特反爬检测 chrome_options.add_argument('--disable-blink-features=AutomationControlled') chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) chrome_options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36') driver = webdriver.Chrome(options=chrome_options) return driver if __name__ == "__main__": driver = init_driver() try: # 测试代理有效性 driver.get("https://httpbin.io/ip") print("当前代理IP:", driver.find_element("tag name", "pre").text) # 测试访问推特 driver.get("https://twitter.com") print("推特页面加载成功") except Exception as e: print(f"错误信息:{str(e)}") finally: driver.quit()
注意事项
- 代理格式必须严格遵循
http://用户名:密码@代理地址:端口,用户名密码是Webshare提供的代理认证信息,不是你的Webshare账号密码 - 免费代理存在连接限制,可添加重试逻辑处理代理失效的情况
方案2:修复Chrome扩展代理认证逻辑
如果必须使用扩展方式,需确保扩展权限和配置正确:
步骤1:准备代理认证扩展
创建一个简单的Chrome扩展,manifest.json需声明必要权限:
{ "manifest_version": 3, "name": "Proxy Auto Auth", "version": "1.0", "permissions": ["proxy", "webRequest", "webRequestBlocking", "<all_urls>"], "background": { "service_worker": "background.js" } }
background.js添加认证处理逻辑:
chrome.webRequest.onAuthRequired.addListener( (details) => { return { authCredentials: { username: chrome.storage.local.get('proxyUser'), password: chrome.storage.local.get('proxyPass') } }; }, {urls: ["<all_urls>"]}, ["blocking"] );
步骤2:代码中加载扩展并注入认证信息
from selenium import webdriver from selenium.webdriver.chrome.options import Options import random PROXIES = [ {"host": "proxy1.webshare.io", "port": 80, "user": "webshare_user", "pass": "webshare_pass"}, # 更多代理 ] def get_random_proxy(): return random.choice(PROXIES) def init_driver(): chrome_options = Options() proxy = get_random_proxy() # 加载本地扩展文件夹 chrome_options.add_argument('--load-extension=./proxy_auth_extension') # 配置代理服务器 prefs = { "proxy": { "mode": "fixed_servers", "server": f"{proxy['host']}:{proxy['port']}" }, "credentials_enable_service": False, "profile.password_manager_enabled": False } chrome_options.add_experimental_option("prefs", prefs) # 绕过反爬检测 chrome_options.add_argument('--disable-blink-features=AutomationControlled') chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) driver = webdriver.Chrome(options=chrome_options) # 注入代理认证信息到扩展 driver.execute_script(f''' chrome.storage.local.set({{ proxyUser: "{proxy['user']}", proxyPass: "{proxy['pass']}" }}); ''') return driver if __name__ == "__main__": driver = init_driver() try: driver.get("https://httpbin.io/ip") print("当前代理IP:", driver.find_element("tag name", "pre").text) driver.get("https://twitter.com") print("推特页面加载成功") except Exception as e: print(f"错误信息:{str(e)}") finally: driver.quit()
通用排查要点
- 验证代理可用性:先用curl测试代理是否正常工作:
curl -x http://user:pass@proxy:port https://httpbin.io/ip - 版本匹配:确保ChromeDriver版本与本地Chrome浏览器版本完全一致
- 反爬绕过:推特对自动化工具检测严格,可改用
undetected-chromedriver库替代原生ChromeDriver,自动绕过检测
内容的提问来源于stack exchange,提问作者fozan javaid
相关产品推荐
相关产品推荐

