Ubuntu服务器使用Selenium+Python爬虫时代理无法使用如何解决
故障排查方案
1. 优先排除系统/网络层面问题
Selenium层的配置一致的情况下,优先验证故障服务器本身和代理的连通性,完全跳过Selenium直接用curl测试:
curl -v -x <你的代理地址:端口> https://www.baidu.com
- 如果该命令报错,说明问题和Selenium无关,优先排查以下场景:
故障服务器的公网IP被代理服务商封禁、服务器本地ufw/安全组限制了代理端口的出站请求、代理地址拼写错误/多余空格、两台服务器的系统时间差超过5分钟导致代理隧道认证失败、代理端设置了白名单仅放行正常服务器的IP
- 对比两台服务器的系统代理配置,检查
/etc/environment、~/.bashrc文件内是否有额外的全局代理规则,全局代理和Selenium传入的代理冲突会直接导致隧道建立失败。
2. 排查Selenium运行环境差异
- 确认两台服务器的Chrome/Chromium、ChromeDriver版本完全匹配,执行以下命令对比输出:
google-chrome --version && chromedriver --version
大版本号不一致的情况下会出现偶发的代理组件初始化异常,直接卸载故障服务器的现有版本,安装和正常服务器完全一致的版本即可解决。
- 检查Chrome启动参数是否包含服务器环境必要的兼容配置,缺失以下参数会导致无头模式下代理隧道建立失败,示例正确配置:
from selenium import webdriver chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--proxy-server=http://<代理地址:端口>') chrome_options.add_argument('--headless=new') # 用新版无头模式,旧版无头模式对代理的兼容性差 chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') chrome_options.add_argument('--ignore-certificate-errors') # 代理使用自签证书时必须添加 driver = webdriver.Chrome(options=chrome_options)
- 安装缺失的系统依赖,执行以下命令补全Chrome运行需要的证书和基础依赖:
apt update && apt install -y ca-certificates libnss3 libxss1 libasound2
3. 带认证代理的特殊处理
如果你的代理需要账号密码认证,不要直接将账号密码拼接在代理地址中传入Selenium,Chrome 90以上版本会拦截这种携带明文认证信息的代理请求,导致隧道建立失败,需要通过插件注入认证信息,或者在系统层面配置代理认证规则。
内容的提问来源于stack exchange,提问作者Rahul Thayath
相关产品推荐
相关产品推荐

