Ubuntu环境下Seleniumbase认证代理失效问题排查求助
修复Ubuntu下Seleniumbase代理连接Chrome失败的问题
1. 代理字符串特殊字符URL编码
Linux环境对代理字符串中的特殊字符(如@、:、%)解析逻辑和Windows不同,直接明文书写会导致代理地址拆分错误。必须对用户名和密码做URL编码:
from urllib.parse import quote_plus from seleniumbase import Driver # 替换为实际代理信息 LOGIN = "your_proxy_login" PASSWORD = "your_proxy_password" IP_PORT = "x.x.x.x:xxxx" # 编码特殊字符 encoded_login = quote_plus(LOGIN) encoded_password = quote_plus(PASSWORD) proxy = f"{encoded_login}:{encoded_password}@{IP_PORT}"
2. 手动配置Chrome代理参数(适配UC模式)
Seleniumbase的UC模式可能需要额外的Chrome启动参数,同时手动通过CDP注入代理认证(headless模式下URL带认证有时不生效):
import base64 from seleniumbase import Driver def get_browser(): browser = Driver( uc=True, undetectable=True, headless=True, chrome_options={ "args": [ f"--proxy-server=http://{IP_PORT}", "--disable-proxy-autodetect", "--no-proxy-server" ] } ) # 通过CDP设置代理认证 auth_str = base64.b64encode(f"{LOGIN}:{PASSWORD}".encode()).decode() browser.execute_cdp_cmd('Network.setProxy', { 'proxyType': 'manual', 'httpProxy': IP_PORT, 'httpsProxy': IP_PORT, 'proxyAuthorization': f"Basic {auth_str}" }) return browser browser = get_browser() browser.open("https://example.com")
3. 排查Ubuntu网络环境
- 测试代理连通性:执行
telnet {IP} {PORT}或curl -x http://{LOGIN}:{PASSWORD}@{IP_PORT} https://example.com,确认服务器能正常访问代理服务器 - 检查全局代理干扰:执行
env | grep -i proxy,如果存在系统级代理,临时取消后再测试
4. 确保依赖版本匹配
- 升级Seleniumbase:
pip install -U seleniumbase - 同步Chrome与Chromedriver版本:执行
sbase install chromedriver,确保驱动和Ubuntu上的Chrome版本完全匹配
5. 解决无界面运行问题
如果服务器缺少X11环境,添加xvfb=True参数让Seleniumbase自动模拟可视化环境:
browser = Driver( uc=True, undetectable=True, headless=True, proxy=proxy, xvfb=True )
内容的提问来源于stack exchange,提问作者AlexeiK
相关产品推荐
相关产品推荐

