Ubuntu WSL中ChromeDriver启动崩溃问题求助
问题:WSL下root用户运行Selenium Chrome驱动启动失败
环境信息
- 系统:Ubuntu WSL
- 运行身份:root用户
- Python版本:3.9
- Chrome版本:113.0.5672.92
- ChromeDriver版本:113.0.5672.63
原测试代码
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') chrome_options.add_argument('--disable-dev-shm-usage') print("options assigned") path = '/usr/bin/chromedriver' browser = webdriver.Chrome(executable_path=path, options=chrome_options)
报错信息
python testscript.py /home/guc3xq/anaconda3/envs/sas/lib/python3.9/site-packages/requests/__init__.py:109: RequestsDependencyWarning: urllib3 (1.26.15) or chardet (5.1.0)/charset_normalizer (2.0.12) doesn't match a supported version! warnings.warn( options assigned Traceback (most recent call last): File "/home/guc3xq/dev/chromedriverdev/testscript.py", line 14, in <module> browser = webdriver.Chrome(executable_path=path, options=chrome_options) File "/home/guc3xq/anaconda3/envs/sas/lib/python3.9/site-packages/selenium/webdriver/chrome/webdriver.py", line 76, in __init__ RemoteWebDriver.__init__( File "/home/guc3xq/anaconda3/envs/sas/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__ self.start_session(capabilities, browser_profile) File "/home/guc3xq/anaconda3/envs/sas/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session response = self.execute(Command.NEW_SESSION, parameters) File "/home/guc3xq/anaconda3/envs/sas/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute self.error_handler.check_response(response) File "/home/guc3xq/anaconda3/envs/sas/lib/python3.9/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: crashed. (unknown error: DevToolsActivePort file doesn't exist) (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
解决方案
1. 补充Chrome启动参数
root用户运行Chrome时,需额外指定调试端口和临时用户数据目录,避免DevToolsActivePort文件缺失问题,添加以下参数:
chrome_options.add_argument('--remote-debugging-port=9222') chrome_options.add_argument('--user-data-dir=/tmp/chrome_temp_dir')
2. 改用webdriver-manager自动管理驱动
利用已导入的ChromeDriverManager自动获取匹配版本的驱动,避免手动指定路径带来的版本或权限问题,替换原代码中路径指定和浏览器初始化部分:
service = Service(ChromeDriverManager().install()) browser = webdriver.Chrome(service=service, options=chrome_options)
3. 确认临时目录权限
确保/tmp目录对root用户有读写权限,执行命令:
chmod 777 /tmp
修改后的完整代码
from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager chrome_options = webdriver.ChromeOptions() # 基础参数 chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--headless=new') # 新版headless模式稳定性更强 chrome_options.add_argument('--disable-gpu') chrome_options.add_argument('--disable-dev-shm-usage') # root运行专属参数 chrome_options.add_argument('--remote-debugging-port=9222') chrome_options.add_argument('--user-data-dir=/tmp/chrome_temp_dir') print("options assigned") # 自动安装匹配驱动并启动浏览器 service = Service(ChromeDriverManager().install()) browser = webdriver.Chrome(service=service, options=chrome_options) # 测试访问页面 browser.get("https://www.google.com") print(browser.title) browser.quit()
内容的提问来源于stack exchange,提问作者mogoli
相关产品推荐
相关产品推荐

