Ubuntu20.04下Selenium启动Chrome报DevToolsActivePort不存在错误求助
解决Ubuntu 20.04上Selenium Headless Chrome启动失败问题
问题核心原因
在无GUI的服务器环境下运行Headless Chrome时,默认配置缺少必要的启动参数,导致Chrome无法正常初始化会话,出现DevToolsActivePort file doesn't exist错误。
具体修复步骤
1. 添加完整的Headless Chrome启动参数
修改代码中的ChromeOptions配置,补充以下关键参数:
--no-sandbox:绕过Chrome的沙箱机制(root用户运行时必需)--disable-dev-shm-usage:避免/dev/shm临时空间不足导致Chrome崩溃--remote-debugging-port=9222:指定调试端口,解决DevToolsActivePort文件缺失问题--window-size=1920,1080:设置窗口尺寸,避免页面布局异常--headless=new:使用Chrome 112+支持的新Headless模式,兼容性更好
修改后的options代码段:
options = Options() options.add_argument('--headless=new') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') options.add_argument('--remote-debugging-port=9222') options.add_argument('--window-size=1920,1080')
2. 验证Chrome单独启动是否正常
在终端手动执行以下命令,测试Chrome能否正常运行:
google-chrome --headless=new --no-sandbox --disable-dev-shm-usage --remote-debugging-port=9222 https://www.google.com
如果命令执行后没有报错,说明Chrome本身可以正常启动,问题出在脚本配置。
3. 检查ChromeDriver权限
确保ChromeDriver文件具备可执行权限:
chmod +x /usr/bin/chromedriver/chromedriver
4. 安装Chrome依赖库(可选)
如果Chrome因依赖缺失无法启动,安装必要的系统库:
apt-get update && apt-get install -y libxss1 libappindicator1 libindicator7 fonts-liberation
修改后的完整代码片段
# Import request lib from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service import time #for calculate time of process import datetime # for actual time and report of time of update import random # Read file with login and pass start_time = time.time() #time of start function update_resumes = 0 # amount of updated resume service = Service(executable_path='/usr/bin/chromedriver/chromedriver') options = Options() # 配置Headless模式必需参数 options.add_argument('--headless=new') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') options.add_argument('--remote-debugging-port=9222') options.add_argument('--window-size=1920,1080') browser = webdriver.Chrome(service=service, options=options) try: with open("/home/demo/hh-auto-raise-resume-server/hh-auto-raise-resume-server/login_pass_real.txt", "r") as f: lines = f.readlines() user_name = lines[0].rstrip('\n') password = lines[1] link = "https://sitename.xxx/" browser.get(link) # Tap button "Entry" delay = random.randint(1, 10) element1 = WebDriverWait(browser, delay).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'correct_selector'))) button = browser.find_element(By.CSS_SELECTOR, 'correct_selector') # 修正原代码中多余的"]" button.click() # other part of code finally: browser.quit()
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

