SeleniumBase+xvfb在Ubuntu虚拟机卡顿,Windows正常的技术求助
SeleniumBase在Ubuntu虚拟机中运行Servipag爬虫卡顿/驱动启动失败问题
问题描述
使用SeleniumBase开发的网页爬虫脚本在Windows本地运行正常,但在Ubuntu虚拟机中处理Servipag网站元素交互时出现卡顿,驱动无法正常启动或打开URL时卡住。已启用uc=True(Undetected Chrome)模式并指定User-Agent规避检测,但问题仍存在。
问题代码
def scrape_servipag_service_reading(service_type, company, identifier, companyType=None, propertyId=None): max_retries = 5 result = None for attempt in range(max_retries): with SB(uc=True, xvfb=True) as sb: try: user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36" sb.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": user_agent}) sb.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})") sb.set_window_size(1920, 1000) url = f"https://portal.servipag.com/paymentexpress/category/{service_type}" sb.uc_open_with_reconnect(url, 4) sb.sleep(2) # Additional code to handle interactions with Servipag except Exception as e: logger.error(f"Attempt {attempt + 1}/{max_retries} failed with error: {e}") finally: if result is not None: break return result
已尝试操作
- 以headless模式运行(驱动无法启动)
- 在SeleniumBase初始化时设置
xvfb=True - 验证元素定位逻辑无问题(Windows环境运行正常)
环境信息
- 操作系统:Ubuntu(虚拟机)
- Chrome版本:129.0.6668.101(尝试过headless模式和xvfb)
- SeleniumBase版本:4.32.9
- Python版本:3.10.0
解决方案建议
1. 确保xvfb依赖完整安装
Ubuntu下可能缺少xvfb的依赖组件,执行以下命令补全:
sudo apt-get update && sudo apt-get install -y xvfb x11vnc xfonts-base
手动启动xvfb服务并设置显示端口:
Xvfb :99 -screen 0 1920x1080x24 & export DISPLAY=:99
之后再运行爬虫脚本。
2. 调整Undetected Chrome的启动参数
SeleniumBase的uc=True模式支持专用的headless优化模式,替换普通headless模式,同时禁用GPU加速避免虚拟机资源瓶颈:
with SB(uc=True, xvfb=True, headless2=True, disable_gpu=True) as sb:
3. 匹配User-Agent与当前Chrome版本
你使用的User-Agent对应Chrome 98,但当前Ubuntu的Chrome是129版本,版本不匹配会增加被检测概率,替换为对应版本的Linux端User-Agent:
user_agent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.6668.101 Safari/537.36"
4. 检查ChromeDriver与Chrome版本兼容性
手动触发SeleniumBase更新ChromeDriver,确保与本地Chrome版本完全匹配:
python -m seleniumbase install chromedriver
验证版本一致性:
chromedriver --version
5. 增加虚拟机资源分配
Ubuntu虚拟机CPU、内存不足会导致Chrome启动卡顿,建议分配至少2核CPU、4GB内存,并关闭不必要的后台进程。
6. 启用调试日志排查启动问题
在SB初始化时添加日志参数,获取详细的启动报错信息:
with SB(uc=True, xvfb=True, verbose=True, log_path="selenium_logs.txt") as sb:
查看生成的日志文件,定位驱动启动失败的具体原因。
内容的提问来源于stack exchange,提问作者Rai
相关产品推荐
相关产品推荐

