Python中Chrome版Selenium WebDriver循环迭代变慢问题排查
Selenium迭代过程中速度逐渐变慢的原因分析
我需要遍历50个分组(站点板块),每个分组包含100000个页面ID,但发现Selenium在每次迭代中速度逐渐变慢。相关代码、运行日志及版本信息如下:
相关代码
chrome_driver_way = './chromedriver/chromedriver.exe' options = Options() options.add_argument('--no-sandbox') options.add_argument('--headless') options.add_argument('--disable-dev-shm-usage') options.add_argument('--disable-gpu') options.add_argument("--disable-extensions") options.add_argument("--disable-infobars") options.add_argument("--log-level=2") options.add_argument('--ignore-ssl-errors') options.add_argument('--ignore-certificate-errors') for group in groups: texts = [None] * len(ids) with webdriver.Chrome( executable_path=chrome_driver_way, options=options ) as browser: start = time.time() for n, id in enumerate(ids): browser.get(url.format(id)) text = browser.find_elements( By.XPATH, '//div/div/div' ) texts[n] = text[0].text if n != 0 and n % 100 == 0: print('group {}: IDs {}-{} processed in {} s'.format(group, n - 100, n, time.time() - start)) start = time.time() del text
运行日志
group 1: IDs 100-200 processed in 8.312201976776123 s group 1: IDs 1100-1200 processed in 9.060782194137573 s group 1: IDs 2100-2200 processed in 11.111422777175903 s ... group 1: IDs 14100-14200 processed in 36.37690353393555 s
版本信息
Python 3.10 Selenium 4.1.0 Chrome 133.0.6943.142
可能的原因
- 浏览器内存泄漏:每次调用
browser.get()加载新页面时,旧页面的DOM元素、JS上下文、缓存等资源未被完全释放,随着迭代次数增加,浏览器进程内存占用持续攀升,直接导致运行速度下降。Python的del text只能清理本地变量,无法影响浏览器端的内存占用。 - 版本兼容性问题:Selenium 4.1.0是2022年发布的旧版本,与2024年的Chrome 133版本差距过大,驱动与浏览器之间的通信逻辑存在适配问题,会导致效率降低、资源泄漏等异常情况。
- 页面加载未优化:每次
browser.get()会加载页面所有资源(图片、脚本、样式等),长期运行后浏览器缓存、历史记录堆积,导致后续页面加载耗时增加。此外,代码未显式等待页面就绪就直接查找元素,可能触发Selenium默认的隐式等待累积开销,进一步拖慢速度。 - 未清理浏览器缓存:长时间运行过程中,浏览器的缓存、Cookie、历史记录等数据不断累积,占用磁盘和内存资源,影响页面加载效率。
- ChromeDriver版本不匹配:Chrome 133需要对应版本的ChromeDriver,而Selenium 4.1.0配套的ChromeDriver版本通常适配Chrome 97左右,旧驱动无法兼容新版本Chrome,会导致通信效率低下、资源占用异常等问题。
内容的提问来源于stack exchange,提问作者Daemon2017
相关产品推荐
相关产品推荐

