Selenium启动超9个会话报错:chromedriver.exe无响应求助
解决Selenium启动多Chrome会话超过9个就崩溃的问题
你遇到的核心问题其实是系统资源过载——每个Chrome浏览器会话都会占用大量内存、CPU资源,一次性启动36个远远超出了系统的承载上限,尤其是Windows系统对进程资源的限制会更明显,当资源耗尽时就会触发chromedriver无响应、会话自行关闭的情况。下面是几个针对性的解决方案:
1. 给Chrome添加资源优化启动参数
通过配置Chrome启动选项,砍掉不必要的功能,大幅降低单个实例的资源占用,比如启用无头模式(不需要可视化界面)、禁用图片加载等:
from selenium import webdriver from selenium.webdriver.chrome.options import Options import time url = "website URL" amount = 36 def generateBrowsers(): chrome_options = Options() # 启用无头模式,节省大量内存资源 chrome_options.add_argument("--headless=new") # 禁用GPU加速(无头模式下不需要) chrome_options.add_argument("--disable-gpu") # 禁用图片加载,减少网络和内存消耗 chrome_options.add_argument("--blink-settings=imagesEnabled=false") # 禁用扩展、插件,避免额外资源占用 chrome_options.add_argument("--disable-extensions") chrome_options.add_argument("--disable-plugins") # 禁用沙箱模式(Windows环境下可能需要) chrome_options.add_argument("--no-sandbox") # 固定窗口大小(无头模式下可选) chrome_options.add_argument("--window-size=1920,1080") for x in range(0, amount): driver = webdriver.Chrome(executable_path="C:/Users/user/Documents/chromedriver_win32/chromedriver.exe", options=chrome_options) driver.get(url) time.sleep(3) driver.quit() # 记得关闭浏览器,彻底释放资源 generateBrowsers()
2. 控制并发数,分批启动会话
一次性启动36个实例太激进,系统根本扛不住。可以用线程池/进程池限制同时运行的实例数量,比如每次最多跑8-10个,完成一批再启动下一批:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from concurrent.futures import ThreadPoolExecutor import time url = "website URL" amount = 36 max_concurrent = 8 # 根据你的系统配置调整,建议8-10 def launch_single_browser(_): chrome_options = Options() chrome_options.add_argument("--headless=new") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--blink-settings=imagesEnabled=false") chrome_options.add_argument("--no-sandbox") driver = None try: driver = webdriver.Chrome(executable_path="C:/Users/user/Documents/chromedriver_win32/chromedriver.exe", options=chrome_options) driver.get(url) time.sleep(3) finally: if driver: driver.quit() # 确保浏览器进程被彻底关闭 def generateBrowsers(): with ThreadPoolExecutor(max_workers=max_concurrent) as executor: executor.map(launch_single_browser, range(amount)) generateBrowsers()
重点提醒:一定要调用
driver.quit(),而不是driver.close()——前者会彻底关闭整个浏览器进程,后者只关闭当前标签页,后台进程仍会占用资源,日积月累会把系统拖垮。
3. 调整系统资源配置
打开任务管理器观察启动9个Chrome时的内存、CPU占用率:
- 如果已经接近100%,先关闭其他不必要的程序,释放资源;
- 可以适当调大Windows虚拟内存:右键「此电脑」→「属性」→「高级系统设置」→「高级」→「性能设置」→「高级」→「虚拟内存」→「更改」,取消“自动管理所有驱动器的分页文件大小”,手动调大分页文件的最大值和最小值。
4. 确认Chrome与chromedriver版本匹配
版本不兼容也可能导致会话崩溃:查看Chrome版本(设置→关于Chrome),然后下载对应版本的chromedriver,确保两者版本完全一致。
内容的提问来源于stack exchange,提问作者Jack P
相关产品推荐
相关产品推荐

