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

Selenium运行一段时间后无法加载页面问题求助

解决Selenium无头模式长时间运行后无法加载页面的问题

嘿,我之前处理大量链接爬取时也碰到过一模一样的问题!无头模式下跑久了就卡壳,非得手动开个浏览器才能恢复,折腾了好一阵才找到几个靠谱的解决方向,分享给你:

1. 内存泄漏 + 定期重启Driver

长时间遍历2000+链接,Chrome的进程会慢慢积累内存,哪怕你做了页面操作的清理,也容易出现资源耗尽导致的加载失败。最直接的办法就是批量处理后重启Driver,比如每处理50-100个链接就关掉当前浏览器,重新初始化一个新的实例:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

def get_headless_driver():
    options = Options()
    # 用新版无头模式!比旧的--headless稳定太多
    options.add_argument("--headless=new")
    options.add_argument("--disable-gpu")
    options.add_argument("--no-sandbox")  # 避免Linux/mac下的权限问题
    options.add_argument("--disable-dev-shm-usage")  # 解决共享内存不足的问题
    return webdriver.Chrome(options=options)

# 你的链接列表
links = [link.strip() for link in open("your_links.txt", "r").readlines()]
batch_size = 50  # 可根据实际情况调整

for idx, link in enumerate(links):
    # 每batch_size个链接重启一次Driver
    if idx % batch_size == 0:
        if 'driver' in locals():
            driver.quit()
        driver = get_headless_driver()
    
    try:
        driver.get(link)
        # 你的页面源码操作逻辑
        print(f"成功处理第 {idx+1} 个链接: {link}")
    except Exception as e:
        print(f"处理链接 {link} 出错: {str(e)}")
        # 出错时直接重启Driver,避免影响后续链接
        driver.quit()
        driver = get_headless_driver()

# 最后记得关闭Driver
driver.quit()

2. 调整页面加载策略与超时设置

无头模式下有时候会因为等待页面完全加载(比如大图片、广告资源)而卡住,你可以设置加载超时,或者改用eager加载策略(只加载DOM结构,不等待所有资源):

# 在初始化Driver时添加
options.add_argument("--page-load-strategy=eager")

# 设置页面加载超时,超时就抛出异常处理
driver.set_page_load_timeout(30)  # 30秒超时,可根据网络情况调整

3. 清理残留的浏览器进程

有时候driver.quit()并没有完全杀掉所有Chrome相关进程,残留的进程会占用系统资源,时间久了就会导致新的Driver实例无法正常工作。可以用psutil工具强制清理:

import psutil

def clean_chrome_processes():
    for proc in psutil.process_iter(['name']):
        # 根据你的系统调整进程名:Windows是chrome.exe/chromedriver.exe,Linux是chrome,Mac是Google Chrome
        if proc.name() in ['chrome.exe', 'chromedriver.exe']:
            try:
                proc.kill()
            except Exception as e:
                print(f"清理进程失败: {str(e)}")

# 在重启Driver前调用这个函数
clean_chrome_processes()

4. 改用新版无头模式

旧的--headless模式(不带=new)是基于旧版Chrome内核的,和正常浏览器行为差异很大,容易出现各种兼容性问题。Chrome 112+推出的--headless=new模式完全模拟正常浏览器的运行逻辑,稳定性提升非常明显,一定要试试这个!

我当时就是靠批量重启Driver+新版无头模式解决了问题,跑2000+链接全程没再卡过。你可以先从这两点入手,应该能解决大部分情况。

内容的提问来源于stack exchange,提问作者Ahmed Lahlou Mimi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:40:57