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

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()

通用排查要点

  1. 验证代理可用性:先用curl测试代理是否正常工作:
    curl -x http://user:pass@proxy:port https://httpbin.io/ip
    
  2. 版本匹配:确保ChromeDriver版本与本地Chrome浏览器版本完全一致
  3. 反爬绕过:推特对自动化工具检测严格,可改用undetected-chromedriver库替代原生ChromeDriver,自动绕过检测

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:42:14