You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium Chrome驱动循环爬取时多类报错原因及修复方法咨询

Chrome WebDriver循环爬取报错原因及修复方案

1. 各报错原因分析

  • Debian第一类报错(Connection refused/Max retries exceeded)
    原因:Chrome进程异常崩溃导致WebDriver和浏览器的连接中断,长时间循环爬取时内存溢出、共享内存不足、Chrome进程没有正确销毁重复启动都会触发该问题。你当前配置中的--disable-dev-sh-usage为拼写错误,参数未生效,Debian默认/dev/shm容量很小,内存不足时Chrome直接崩溃,就会拒绝WebDriver的连接请求。
  • Debian第二类报错(无法定位XPath元素)
    原因:要么是页面未加载完成就执行了元素查找逻辑,要么是页面触发反爬机制返回了和预期不符的结构,另外headless模式的页面渲染和正常模式存在差异,元素加载逻辑不同也会导致查找失败。
  • MacOS报错(DevToolsActivePort file doesn't exist)
    原因:MacOS下Chrome启动时权限不足、未指定正确的调试端口、headless模式参数冲突。当前启动配置缺少--remote-debugging-port参数,Chrome启动时无法生成DevTools的端口文件,WebDriver检测不到Chrome进程就会判定为崩溃。

2. 具体修复方案

2.1 修正Chrome启动配置

先修复原有配置的拼写错误,新增适配双系统的必要参数:

options.add_argument('--no-sandbox')
options.add_argument('--headless')
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_experimental_option("excludeSwitches", ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument('--disable-notifications')
options.add_argument('--disable-extensions')
options.add_argument("--disable-plugins-discovery")
# 修正原拼写错误的参数
options.add_argument('--disable-dev-shm-usage')
options.add_argument(f'window-size={resol}')
# 新增通用适配参数
options.add_argument('--remote-debugging-port=9222')
options.add_argument('--disable-gpu')
options.add_argument('--no-zygote')
options.add_argument('--disable-setuid-sandbox')

2.2 各报错针对性修复

  • 针对Debian Connection refused报错
    1. 每次循环结束后手动调用driver.quit()销毁进程,不要仅使用driver.close(),避免残留僵尸进程占用端口和内存
    2. 每次启动新Driver前执行pkill -f chrome命令杀掉残留Chrome进程
    3. 按需调高Debian系统/dev/shm分区容量,避免内存不足触发Chrome崩溃
  • 针对无法定位元素报错
    1. 替换强制等待为显式等待,示例逻辑:
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    # 最多等待10秒直到目标元素加载完成
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//input[@name='name']"))
    )
    
    1. 查找元素前先校验当前页面的标题或特征元素是否符合预期,排除反爬返回异常页面的情况
  • 针对MacOS DevToolsActivePort报错
    1. 确认Chrome和ChromeDriver的大版本号完全匹配,版本不一致会大概率触发启动异常
    2. 若使用root用户运行脚本,必须保留--no-sandbox参数,MacOS下root用户默认无法无沙箱启动Chrome
    3. 启动前杀掉残留的Chrome进程,避免调试端口被占用

内容的提问来源于stack exchange,提问作者Inksis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:36:03