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

VPS环境下使用undetected_chromedriver启动Chrome报SessionNotCreatedException求助

VPS环境下使用undetected_chromedriver启动Chrome报SessionNotCreatedException求助

兄弟,我之前在VPS上用undetected_chromedriver也踩过一模一样的坑!先帮你把问题理清楚,再给你几个亲测有效的解决方向:

你的问题场景:

NOTE: It all works perfectly on my local machine, once I pushed it to the VPS, it stopped working.
I installed all dependencies, etc. IDK what else to do.

我在Python脚本里用undetected_chromedriver启动Chrome浏览器时,遇到了SessionNotCreatedException,脚本本来是要登录一个web应用并抓取数据的,以下是报错的回溯信息:

错误信息:

Traceback (most recent call last):
File "/root/lsrp-discord-bot/setup_db.py", line 115, in <module>
main()
File "/root/lsrp-discord-bot/setup_db.py", line 105, in main
driver = login_ucp()
^^^^^^^^^^^
File "/root/lsrp-discord-bot/setup_db.py", line 25, in login_ucp
driver = uc.Chrome(use_subprocess=False,service=service)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/lsrp-discord-bot/venv/lib/python3.11/site-packages/undetected_chromedriver/__init__.py", line 466, in __init__
super(Chrome, self).__init__(options=options, service=service, keep_alive=True)
...

按优先级尝试这些解决方法:

  • 先核对Chrome与undetected_chromedriver的版本兼容性
    本地和VPS的Chrome版本大概率不一样!undetected_chromedriver对Chrome版本的匹配要求极高,先在VPS上执行google-chrome --version查看版本,然后确保安装的undetected_chromedriver适配这个版本。如果不匹配,要么升级/降级VPS上的Chrome,要么用pip install undetected-chromedriver==<对应版本>重新安装适配的库。

  • 补全Chrome在无头环境的依赖
    就算你装了基础依赖,无头环境下Chrome还需要一些额外的系统库:
    如果是Ubuntu/Debian系VPS,执行:

    sudo apt-get install -y libxss1 libappindicator1 libindicator7 libgbm-dev
    

    如果是CentOS/RHEL系,执行:

    sudo yum install -y libXScrnSaver libappindicator-gtk3 libgbm
    

    另外要确认你装的是完整的Chrome浏览器,不是只装了chromedriver!

  • 给Chrome加上无头环境必备的启动参数
    VPS一般是无图形界面的无头环境,必须给undetected_chromedriver配置这些参数,修改你的初始化代码:

    from undetected_chromedriver import Chrome, ChromeOptions
    from selenium.webdriver.chrome.service import Service
    
    service = Service()
    options = ChromeOptions()
    options.add_argument('--headless=new')  # 新版无头模式,更贴近正常Chrome行为
    options.add_argument('--no-sandbox')    # 禁用沙箱,VPS上几乎必须开这个
    options.add_argument('--disable-dev-shm-usage')  # 解决/dev/shm空间不足的问题
    options.add_argument('--disable-gpu')   # 无头环境不需要GPU加速
    options.add_argument('--window-size=1920,1080')  # 模拟正常窗口尺寸,避免被识别
    
    driver = uc.Chrome(options=options, use_subprocess=False, service=service)
    

    这些参数是无头环境下的标配,大概率能解决启动失败的问题。

  • 检查运行权限问题
    你用root用户运行脚本的话,Chrome可能会拒绝启动。可以试试创建一个普通用户来运行脚本,或者临时给Chrome加上--allow-root参数(不推荐长期用,安全性差,但可以用来验证是不是权限问题)。

  • 查看chromedriver日志定位具体问题
    如果上面的方法都没用,可以开启日志看更详细的错误:

    service = Service(log_path='/tmp/chromedriver.log')
    driver = uc.Chrome(use_subprocess=False, service=service)
    

    然后查看/tmp/chromedriver.log里的内容,里面会有启动失败的具体原因,比如某个依赖缺失或者配置错误。

备注:内容来源于stack exchange,提问作者Ben Bichler

火山引擎 最新活动