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




