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

Selenium ChromeDriver长时间运行后变慢,是否需重建驱动?

问题分析与解决方案

核心问题原因

  • 内存泄漏与资源堆积:ChromeDriver运行时,每个页面加载会留下缓存、Cookie、本地存储、DOM元素引用,甚至未关闭的后台进程(比如Service Worker)。长期循环不重启驱动,这些资源会持续占用内存和CPU,导致浏览器性能下降。
  • 页面进程残留:Chrome采用多进程架构,即使关闭标签页,部分异常的渲染进程或插件进程可能未被彻底销毁,逐渐累积拖慢运行速度。
  • Chrome内存管理限制:Chrome的内存回收机制无法做到100%彻底,长期运行后会产生内存碎片,直接影响页面加载效率。

优化措施

  • 定期重建驱动实例:这是解决性能下降最直接有效的方案。可以设置循环次数阈值(比如每爬取50-100个URL),或根据内存占用情况,销毁当前驱动并重新初始化。示例代码:
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    def init_driver():
        chrome_options = Options()
        # 添加资源优化参数
        chrome_options.add_argument('--blink-settings=imagesEnabled=false')
        chrome_options.add_argument('--disable-javascript')
        chrome_options.add_argument('--disable-dev-shm-usage')
        chrome_options.add_argument('--no-sandbox')
        return webdriver.Chrome(options=chrome_options)
    
    driver = init_driver()
    count = 0
    max_count = 100  # 每爬100个页面重启一次驱动
    
    for url in target_urls:
        try:
            driver.get(url)
            # 你的爬取逻辑代码
            count += 1
            if count >= max_count:
                driver.quit()  # 彻底销毁驱动及关联进程
                driver = init_driver()
                count = 0
        except Exception as e:
            # 异常场景下强制重启驱动,避免卡死
            driver.quit()
            driver = init_driver()
            count = 0
    
  • 每次爬取后清理页面资源:切换URL前执行清理操作,减少资源残留:
    # 清理所有Cookie
    driver.delete_all_cookies()
    # 清理本地存储与会话存储
    driver.execute_script("window.localStorage.clear();")
    driver.execute_script("window.sessionStorage.clear();")
    # 关闭多余标签页并切回主窗口
    if len(driver.window_handles) > 1:
        driver.switch_to.window(driver.window_handles[-1])
        driver.close()
        driver.switch_to.window(driver.window_handles[0])
    
  • 启用Chrome无头模式与轻量参数:无头模式本身资源占用更低,搭配以下参数可进一步优化:
    chrome_options.add_argument('--headless=new')
    chrome_options.add_argument('--disable-gpu')
    chrome_options.add_argument('--disable-extensions')
    chrome_options.add_argument('--disable-plugins')
    
  • 监控资源占用:通过系统工具(如top、ps)或代码获取Chrome进程的内存占用,当达到预设阈值时自动重启驱动。

总结

长期单实例运行ChromeDriver必然会出现资源堆积问题,定期重建驱动是必要的优化手段。结合每次爬取后的资源清理与Chrome参数优化,可大幅缓解性能下降问题,提升爬虫的稳定性与运行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:05:16