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

Selenium循环访问Wooclap页面时driver.get速度优化咨询

问题描述

我尝试访问网页www.wooclap.com/EPUUJK,该网站用于创建活动与发起提问,页面底部可查看已连接的用户数。我编写了如下代码:

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('-no-sandbox')
options.add_argument('-disable-dev-shm-usage')
x =-1

while x <0:
    driver = webdriver.Chrome('chromedriver', options=options)
    driver.get("https://www.wooclap.com/EPUUJK")

这段代码可正常运行,每5秒已连接用户数会增加1,但我希望大幅提升该操作的速度,请问该如何实现?

提速方案

1. 复用浏览器实例,避免重复启动Chrome

你的代码每次循环都新建Chrome驱动实例,浏览器启动本身就是最大的性能瓶颈。把驱动初始化移到循环外,循环内仅执行页面访问/刷新:

from selenium import webdriver
import time

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
# 追加优化参数
options.add_argument('--disable-gpu')
options.add_argument('--disable-extensions')

# 仅初始化一次浏览器
driver = webdriver.Chrome('chromedriver', options=options)
x = -1

try:
    while x < 0:
        driver.get("https://www.wooclap.com/EPUUJK")
        # 可根据情况调整延迟,避免请求过于频繁触发拦截
        time.sleep(0.5)
finally:
    driver.quit()

2. 用refresh()替代重复get请求

如果页面刷新即可更新用户数,使用driver.refresh()比重复调用get更高效:

# 先一次性打开页面
driver.get("https://www.wooclap.com/EPUUJK")
while x <0:
    driver.refresh()
    time.sleep(0.5)

3. 优化Chrome参数,减少资源消耗

在现有参数基础上,添加以下参数进一步压缩加载时间:

  • --blink-settings=imagesEnabled=false:禁用图片加载(如果用户数统计不依赖图片)
  • --incognito:使用无痕模式,避免缓存和历史记录干扰
  • --disable-features=VizDisplayCompositor:关闭不必要的渲染组件

4. 改用更轻量的浏览器驱动

如果Chrome资源占用过高,可替换为Firefox无头模式或Edge驱动,这类浏览器在无头模式下资源消耗更低。示例Firefox配置:

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

options = Options()
options.add_argument('--headless')
driver = webdriver.Firefox(options=options)

5. 谨慎使用并发请求(注意防封)

单实例提速有限时,可通过多线程/多进程启动多个浏览器实例,但需控制并发量,避免触发网站反爬机制。示例多线程代码:

import threading
from selenium import webdriver

def visit_loop():
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    driver = webdriver.Chrome('chromedriver', options=options)
    try:
        while True:
            driver.refresh()
            time.sleep(0.5)
    finally:
        driver.quit()

# 启动3个线程(根据实际情况调整数量)
for _ in range(3):
    t = threading.Thread(target=visit_loop)
    t.daemon = True
    t.start()

# 保持主线程运行
while True:
    pass

⚠️ 注意:并发请求可能导致IP被封禁,建议先测试低并发量,并设置合理延迟。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 09:50:26