You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何修复VPS上Python Selenium脚本的Chrome异常退出错误?

解决1GB内存VPS上Chrome Selenium启动异常退出的问题

这种情况我之前在小内存VPS上也碰到过,核心原因是Chrome默认资源占用较高,1GB内存的VPS不足以支撑其正常启动,再加上老版本chromedriver的兼容性问题,就会触发Chrome failed to start: exited abnormally错误。下面是一步步的解决方案:

1. 优化Chrome启动参数,大幅降低内存占用

在你的Chrome选项中添加更多内存优化参数,修改后的代码如下:

def automate_test(self):
    # instantiate a chrome options object so you can set the size and headless preference
    chrome_options = Options()
    chrome_options.add_argument("--headless")
    chrome_options.add_argument('--no-sandbox')
    chrome_options.add_argument("--disable-dev-shm-usage")  # 禁用/dev/shm,避免小内存VPS共享内存不足
    chrome_options.add_argument("--disable-gpu")  # 无头模式无需GPU加速,减少资源消耗
    chrome_options.add_argument("--single-process")  # 强制Chrome单进程运行,降低内存开销
    chrome_options.add_argument("--window-size=1024x768")  # 调低窗口分辨率,比1920x1080省内存
    chrome_options.add_argument("--disable-extensions")  # 禁用默认扩展,减少不必要的内存占用
    chrome_options.add_argument("--disable-plugins")  # 禁用插件,进一步压缩资源需求

    driver = webdriver.Chrome(chrome_options=chrome_options, executable_path='/root/chromedriver')
    driver.get("https://google.com")

这些参数里,--disable-dev-shm-usage是关键:Linux系统默认的/dev/shm分区很小,Chrome会优先使用它存储临时数据,1GB VPS上很容易耗尽,禁用后Chrome会切换到磁盘临时文件,虽然速度稍慢但能解决启动失败的问题。

2. 检查并更新Chrome与chromedriver版本匹配

你用的chromedriver是2.26版本,这个版本非常老旧(对应Chrome 53-55版本),老版本Chrome的内存优化远不如新版,而且兼容性问题更多。建议:

  • 先查看当前VPS上安装的Chrome版本:google-chrome --version
  • 下载对应版本的chromedriver(确保主版本号一致,比如Chrome是114.x,就下载114.x的chromedriver)
  • 替换掉旧的/root/chromedriver,并赋予执行权限:chmod +x /root/chromedriver

3. 增加Swap分区缓解内存压力

1GB内存确实紧张,给VPS加个Swap分区当“虚拟内存”,能有效避免内存不足导致进程崩溃:

# 创建1GB的swap文件
sudo fallocate -l 1G /swapfile
# 设置权限避免被其他用户访问
sudo chmod 600 /swapfile
# 格式化swap文件
sudo mkswap /swapfile
# 启用swap
sudo swapon /swapfile
# 设置开机自动挂载swap
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

4. 避免用root用户运行(可选)

虽然你加了--no-sandbox,但root用户运行Chrome还是可能触发一些权限或安全限制导致异常。如果可以的话,创建一个普通用户来运行脚本:

sudo adduser selenium-user
sudo su - selenium-user
# 然后在这个用户下安装依赖、运行脚本

按这个顺序一步步试,先加优化参数,不行再更新版本,最后加swap,基本能解决问题。

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

火山引擎 最新活动