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
相关产品推荐
相关产品推荐

