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

Undetected Chrome Driver随机停止(闲置问题)求助

问题解决方案

以下是针对Undetected Chrome Driver随机停滞问题的具体修复方案:


1. 修复无效命令行参数

你的代码中----disable-javascript多了一个短横线,无效参数会导致Chrome启动或运行异常,应改为:

options.add_argument('--disable-javascript')

2. 优化Headless模式与稳定参数

添加更适合Headless运行的参数,避免渲染或检测问题:

options.add_argument('--headless=new')  # 使用新版Headless模式,兼容性更好
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--window-size=1920x1080')

3. 调整页面加载策略

默认加载策略会等待所有资源加载完成,容易引发超时或停滞,改为仅等待DOM加载完成:

options.page_load_strategy = 'eager'

4. 增加重试机制与异常捕获

针对偶然的网络或加载问题,添加重试逻辑,同时捕获更多异常类型:

max_retries = 3
for link in url[:166]:
    retries = 0
    success = False
    while retries < max_retries and not success:
        try:
            driver.get(link)
            success = True
        except TimeoutException:
            retries += 1
            print(f"Timeout, retrying {retries}/{max_retries} for {link}")
        except Exception as e:
            print(f"Error loading {link}: {str(e)}")
            retries += 1

5. 定期清理状态与重启Driver

长时间运行Driver易积累缓存或内存泄漏,每处理一定数量链接后重启Driver,并清理浏览器状态:

batch_size = 20  # 每20个链接重启一次
for idx, link in enumerate(url[:166], 1):
    if idx % batch_size == 0:
        driver.quit()
        driver = uc.Chrome(use_subprocess=True, options=options, service=Service(ChromeDriverManager().install()))
        driver.set_page_load_timeout(10)
    
    # 执行加载逻辑后清理状态
    driver.delete_all_cookies()
    driver.execute_script("window.localStorage.clear();")

完整优化代码

from selenium.common.exceptions import TimeoutException
import undetected_chromedriver as uc
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

# 初始化浏览器配置
options = uc.ChromeOptions()
options.add_argument('--disable-extensions')
options.add_argument('--disable-javascript')
options.add_argument('--headless=new')
options.add_argument('--disable-backgrounding-occluded-windows')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--window-size=1920x1080')
options.page_load_strategy = 'eager'  # 设置DOM加载完成即停止等待

def init_driver():
    """封装Driver初始化逻辑,方便重启调用"""
    return uc.Chrome(use_subprocess=True, options=options, service=Service(ChromeDriverManager().install()))

driver = init_driver()
driver.set_page_load_timeout(10)

# 读取链接并过滤空行
with open('PlayerLinks.txt', 'r') as file:
    url = [line.strip() for line in file if line.strip()]

batch_size = 20
max_retries = 3

for idx, link in enumerate(url[:166], 1):
    # 定期重启Driver
    if idx % batch_size == 0:
        driver.quit()
        driver = init_driver()
        driver.set_page_load_timeout(10)
    
    # 重试加载逻辑
    retries = 0
    success = False
    while retries < max_retries and not success:
        try:
            driver.get(link)
            success = True
            # 清理浏览器状态
            driver.delete_all_cookies()
            driver.execute_script("window.localStorage.clear();")
        except TimeoutException:
            retries += 1
            print(f"Timeout, retrying {retries}/{max_retries} for {link}")
        except Exception as e:
            print(f"Error loading {link}: {str(e)}")
            retries += 1
    
    print(f"Processed {idx}/166: {link}")

# 最后关闭Driver
driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 23:02:32