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

Selenium搭配PhantomJS易挂起?自制下载Bot运行后性能下降咨询

Selenium Bot多次运行后变慢的原因及解决方法

我帮你分析下这个问题——用Selenium做下载Bot跑多了变慢是很常见的情况,结合你做的循环测试,大概率是资源堆积或者内存泄漏类的问题,下面分原因和解决方法来说:

可能的原因

  • 浏览器缓存与存储堆积:每次访问网站,浏览器都会缓存图片、静态资源,还有Cookie、本地存储数据,跑的次数多了这些数据会占满磁盘缓存和内存,拖慢页面加载和浏览器响应速度。
  • WebDriver资源未正确释放:如果你的循环里只是重复打开页面,却没关闭旧的标签页或者退出WebDriver实例,这些残留的浏览器进程会一直在后台占用内存和CPU,系统资源越用越少,自然就慢了。
  • 页面内存泄漏:有些网站的前端代码写得不够规范,反复加载同一类页面后,JavaScript的内存泄漏会导致浏览器内存占用持续上升,时间久了就会明显卡顿。
  • 循环内的冗余操作:虽然你的示例代码看起来没问题,但如果循环里有重复创建对象、重复初始化不必要的组件,也会逐渐积累性能开销。

针对性解决方法

1. 定期清理浏览器数据

每次处理完一个路径后,清理浏览器的缓存、Cookie和本地存储,避免堆积:

# 清理所有来源的存储数据
driver.execute_cdp_cmd('Storage.clearDataForOrigin', {
    "origin": "*",
    "storageTypes": "all"
})

如果清理后还是慢,也可以考虑每次循环结束后关闭当前标签,打开新标签页:

# 关闭当前标签
driver.close()
# 打开新标签
driver.switch_to.new_window('tab')

2. 确保WebDriver资源完全释放

最稳妥的方式是每次循环都重启WebDriver,避免残留进程占用资源,用try-finally确保即使出错也能退出:

paths = ['p1', 'p2', 'p3', 'p4', 'p5']
path_count = len(paths)
counter = 0

while True:
    driver = None
    try:
        # 初始化浏览器
        options = webdriver.ChromeOptions()
        # 可选:添加无头模式等优化参数
        options.add_argument('--headless=new')
        driver = webdriver.Chrome(options=options)
        
        counter += 1
        path = paths[counter % path_count]
        # 这里写你的下载逻辑
        
    finally:
        # 确保浏览器被关闭
        if driver:
            driver.quit()

3. 限制浏览器资源使用

启动Chrome时添加一些参数,减少资源消耗:

options = webdriver.ChromeOptions()
# 禁用扩展、GPU加速(无头模式下不需要)
options.add_argument('--disable-extensions')
options.add_argument('--disable-gpu')
# 避免/dev/shm内存不足问题
options.add_argument('--disable-dev-shm-usage')
# 限制磁盘缓存大小为1MB
options.add_argument('--disk-cache-size=1048576')
# 禁用内存压力节流,避免浏览器自动降速
options.add_argument('--memory-pressure-off')

driver = webdriver.Chrome(options=options)

4. 优化循环逻辑

把不变的初始化操作放到循环外面,比如提前计算路径列表的长度,避免每次循环都重复计算:

paths = ['p1', 'p2', 'p3', 'p4', 'p5']
path_count = len(paths)  # 提前计算长度,循环内直接用
counter = 0

while True:
    counter += 1
    path = paths[counter % path_count]
    # 处理逻辑

5. 使用无头模式

如果不需要可视化操作,开启无头模式能大幅减少内存和CPU占用,让Bot运行更流畅:

options = webdriver.ChromeOptions()
options.add_argument('--headless=new')  # 新版无头模式,功能更完整
driver = webdriver.Chrome(options=options)

内容的提问来源于stack exchange,提问作者Mohsin Kale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:07:39