Ubuntu下Selenium+Chrome单用户可用另一用户报错排查求助
问题描述
在Ubuntu 22.04系统中有两个用户,二者的Python 3.10.12虚拟环境内安装的包完全一致:
selenium==4.2.0 webdriver-manager==4.0.1
两个用户均能执行chrome命令:
$ ls -al /opt/google/chrome/chrome -rwxr-xr-x 1 root root 229088456 Sep 20 23:10 /opt/google/chrome/chrome
其中一个用户运行以下代码正常,另一个用户则报错:
from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager options = webdriver.ChromeOptions() options.add_argument('headless') wdm = ChromeDriverManager() selenium = webdriver.Chrome(wdm.install(), options=options)
第二个用户的报错信息:
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/testing/testing/testing_env/lib/python3.10/site-packages/selenium/webdriver/chrome/webdriver.py", line 70, in __init__ super(WebDriver, self).__init__(DesiredCapabilities.CHROME['browserName'], "goog", File "/home/testing/testing/testing_env/lib/python3.10/site-packages/selenium/webdriver/chromium/webdriver.py", line 92, in __init__ RemoteWebDriver.__init__( File "/home/testing/testing/testing_env/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 275, in __init__ self.start_session(capabilities, browser_profile) File "/home/testing/testing/testing_env/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 365, in start_session response = self.execute(Command.NEW_SESSION, parameters) File "/home/testing/testing/testing_env/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 430, in execute self.error_handler.check_response(response) File "/home/testing/testing/testing_env/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py", line 247, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.SessionNotCreatedException: Message: session not created: Chrome failed to start: exited normally. (session not created: DevToolsActivePort file doesn't exist) (The process started from chrome location /opt/google/chrome/chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.) Stacktrace: #0 0x559104ccb6b3 <unknown> #1 0x5591049a11e7 <unknown> #2 0x5591049d4526 <unknown> #3 0x5591049d069c <unknown> #4 0x559104a1323a <unknown> #5 0x559104a09e93 <unknown> #6 0x5591049dc934 <unknown> #7 0x5591049dd71e <unknown> #8 0x559104c90cb8 <unknown> #9 0x559104c94bf0 <unknown> #10 0x559104c9f19c <unknown> #11 0x559104c95808 <unknown> #12 0x559104c6227f <unknown> #13 0x559104cb9e88 <unknown> #14 0x559104cba059 <unknown> #15 0x559104cca843 <unknown> #16 0x7f8c8ba94b43 <unknown>
排查方向
- 检查用户Chrome配置目录权限:第二个用户可能没有权限读写自己的Chrome配置目录(通常在
~/.config/google-chrome/),尝试临时重命名该目录,让Chrome生成新的配置文件后再测试。 - 验证ChromeDriver版本匹配:手动确认两个用户安装的ChromeDriver版本是否和系统Chrome版本一致。执行
chromedriver --version和google-chrome --version对比,确保主版本号完全匹配。 - 添加更多Chrome启动参数:在headless模式下,部分环境需要额外参数才能启动,尝试给ChromeOptions添加:
这些参数能解决无沙箱环境、共享内存不足或端口冲突问题。options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') options.add_argument('--remote-debugging-port=9222') - 检查用户环境变量差异:对比两个用户的环境变量,尤其是
PATH、HOME、DISPLAY(即使headless模式也可能影响)。执行env | sort分别导出两个用户的环境变量,逐行比对差异。 - 测试直接启动Chrome:让第二个用户直接在命令行执行
google-chrome --headless --disable-gpu --dump-dom https://www.google.com,看是否能正常运行,排查Chrome本身的启动问题,而非Selenium调用的问题。 - 检查临时目录权限:Chrome和ChromeDriver需要读写临时目录(如
/tmp/),确认第二个用户对/tmp/有读写权限,执行ls -ld /tmp/查看权限,确保其他用户有rwx权限(通常权限是drwxrwxrwt)。 - 排查进程残留:检查第二个用户是否有残留的Chrome或ChromeDriver进程,执行
ps aux | grep chrome和ps aux | grep chromedriver,杀掉所有相关进程后再重新测试。 - 查看Chrome启动日志:给Chrome添加日志参数,捕获启动失败的详细信息,在代码中添加:
运行后分析日志中的错误信息。options.add_argument('--enable-logging') options.add_argument('--v=1') options.add_argument('--log-path=/tmp/chrome_debug.log')
内容的提问来源于stack exchange,提问作者M3RS
相关产品推荐
相关产品推荐

