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

Windows虚拟机中undetected-chromedriver随机卡死问题求助

问题描述

在Windows虚拟机中使用Selenium遍历数千个域名时,采用undetected-chromedriver会出现以下问题:

  • 访问几百或几千个页面后随机卡死,已设置的60秒页面加载超时、60秒脚本超时完全不触发
  • 卡死状态持续10-20分钟后,抛出类似Timed out receiving message from renderer: -1062.446的异常,随后继续执行后续任务
  • 日志显示最后一步为发送POST请求,非无头模式下可见浏览器页面已正常加载,但脚本处于冻结状态
  • 将卡死的页面移至列表开头重新运行,可正常执行无问题

当前驱动配置代码:

import undetected_chromedriver as uc

def setup_chromium_browser(self):
        self._selenium_options = uc.ChromeOptions()

        self._selenium_options.add_argument("--disable-renderer-backgrounding")
        self._selenium_options.add_argument("--disable-backgrounding-occluded-windows")
        
        self.driver = uc.Chrome(
            options=self._selenium_options
        )

        self.driver.set_page_load_timeout(60)
        self.driver.set_script_timeout(60)
原因解析

1. 负数值超时异常的本质

Timed out receiving message from renderer: -1062.446中的负数是Chromium内核内部超时计算溢出导致的。当实际等待时间超过驱动程序预设的最大正数阈值时,数值溢出变为负数,核心问题仍是渲染进程与驱动进程的通信超时。

2. 随机卡死的核心诱因

  • 渲染进程资源泄漏:长时间遍历大量域名后,Chromium渲染进程会积累内存泄漏、未释放句柄或残留的JS上下文。即便页面视觉上加载完成,后台仍可能有未结束的异步任务(如广告脚本、统计请求)占用渲染进程,导致驱动进程无法收到加载完成的信号,进而触发超长等待。
  • undetected-chromedriver通信阻塞:undetected-chromedriver为绕过反爬修改了Chromium的启动和通信逻辑,但长时间运行时,驱动与Chromium的进程通信可能出现队列阻塞。例如POST请求后的响应信号被积压,驱动进程无法及时感知页面状态。
  • 虚拟机资源限制:Windows虚拟机的CPU、内存或IO资源不足时,会导致Chromium进程调度延迟。即使页面加载完成,渲染进程向驱动发送信号的操作被系统调度阻塞,造成脚本层面的“假死”。
  • 超时机制覆盖不全:set_page_load_timeout仅针对页面初始加载阶段,set_script_timeout针对脚本执行,但如果页面加载完成后有后台异步任务持有渲染进程锁,这两个超时都无法触发。驱动进程会一直等待渲染进程的“空闲”信号,直到内部硬超时触发(即10-20分钟后的负数超时异常)。

3. 复现正常的原因

将卡死页面移至列表开头时,浏览器进程处于初始状态,资源充足、无残留上下文,渲染进程能快速完成所有任务并向驱动发送信号,因此不会触发卡死。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:35:18