Selenium结合Selenium Wire的while True循环运行速度逐渐变慢求助
解决Selenium Wire循环迭代耗时递增的问题
可能的原因
- Selenium Wire请求缓存堆积:默认情况下,Selenium Wire会存储所有拦截到的网络请求,哪怕你没用到这些数据,每次循环都会新增记录,导致后续处理时需要遍历的历史请求越来越多,拖慢耗时。
- 浏览器上下文残留:复用同一个浏览器实例时,页面的Cookie、本地存储、缓存资源会不断累积,哪怕刷新页面,部分冗余资源依然会留在浏览器进程中,导致加载和操作变慢。
- 未清理的浏览器状态:循环中如果没正确处理弹窗、iframe切换,或者元素引用未及时释放,会导致浏览器渲染上下文越来越臃肿,虽然内存占用没明显飙升,但实际运行效率下降。
可行的解决方案
清空Selenium Wire请求缓存
每次循环结束后调用driver.requests.clear(),直接清空已捕获的请求记录,避免历史数据堆积。重置浏览器存储与状态
在循环的收尾阶段执行以下操作,清理浏览器的冗余数据:# 删除所有Cookie driver.delete_all_cookies() # 清理本地存储和会话存储 driver.execute_script("window.localStorage.clear(); window.sessionStorage.clear();")定期重启浏览器实例
不要长期复用同一个浏览器进程,比如每执行N次循环后关闭当前浏览器,重新初始化一个实例。这样能彻底清除浏览器的所有残留状态,回到初始性能水平。示例代码:from seleniumwire import webdriver import time loop_count = 0 driver = webdriver.Chrome() while True: loop_count += 1 start = time.time() print(f"循环{loop_count}启动: {time.strftime('%Y-%m-%d %H:%M:%S')}") try: driver.get("你的自有网站地址") # 执行任务逻辑(拦截流量、操作页面等) ... # 清理单次循环的缓存 driver.requests.clear() driver.delete_all_cookies() driver.execute_script("window.localStorage.clear(); window.sessionStorage.clear();") except Exception as e: print(f"循环出错: {str(e)}") driver.quit() driver = webdriver.Chrome() # 每10次循环重启浏览器 if loop_count % 10 == 0: driver.quit() driver = webdriver.Chrome() print(f"循环耗时: {time.time() - start:.2f}秒")优化Selenium Wire捕获配置
初始化浏览器时,通过配置限制请求存储的大小,或者在不需要拦截的阶段关闭捕获:options = { 'request_storage': 'memory', 'request_storage_max_size': 100 # 最多存储100条请求 } driver = webdriver.Chrome(seleniumwire_options=options)
内容的提问来源于stack exchange,提问作者N Godrich
相关产品推荐
相关产品推荐

