服务器nohup运行Selenium脚本报错问题求助
问题排查与解决方案
针对服务器nohup运行Selenium脚本时出现的NoSuchWindowException、WebDriverException(DevTools断开)问题,结合Chrome/ChromeDriver 110.0.5481.100环境,以下是具体排查方向和解决办法:
一、替换Headless模式参数
旧版--headless参数在部分服务器环境下存在稳定性缺陷,改用新版无头模式参数,并指定窗口大小避免页面加载异常:
options.add_argument('--headless=new') # 替换原--headless参数 options.add_argument('--window-size=1920,1080') # 固定窗口尺寸,适配页面渲染
二、修正用户代理(UA)
当前使用的UA对应Chrome 81,与实际运行的Chrome 110版本不匹配,可能被目标网站拦截导致页面加载失败,替换为对应版本的UA:
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.5481.100 Safari/537.36")
三、补充稳定性参数
添加服务器环境下Chrome运行的必要参数,解决资源限制和连接问题:
options.add_argument('--disable-dev-shm-usage') # 规避服务器/dev/shm空间不足导致的崩溃 options.add_argument('--disable-gpu') # 无头模式下禁用GPU加速 options.add_argument('--remote-debugging-port=9222') # 固定调试端口,避免端口冲突 options.add_argument('--disable-extensions') # 禁用扩展,减少运行干扰
四、优化脚本运行配置
- nohup启动命令:确保运行时输出日志并正确继承环境变量:
nohup python3 your_script.py > selenium_run.log 2>&1 & - chromedriver路径:使用绝对路径替代相对路径,避免nohup运行时路径解析错误:
from pathlib import Path chromedriver_path = str(Path(__file__).resolve().parent / "chromedriver") serv = Service(chromedriver_path)
五、添加页面加载等待
服务器网络延迟可能导致页面未加载完成就执行后续操作,添加显式等待确保页面就绪:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver.get("any_link") # 等待页面标题加载完成(可替换为关键元素的等待条件) WebDriverWait(driver, 15).until(EC.title_is("预期页面标题"))
六、检查系统资源
使用top或htop命令查看服务器CPU、内存负载,Chrome Headless运行需要足够资源,资源不足会导致进程意外崩溃。
内容的提问来源于stack exchange,提问作者Useren
相关产品推荐
相关产品推荐

