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

在Selenium中如何同时执行多个搜索任务以提升运行效率

实现方案

完全可以用threading实现该需求,Selenium的浏览器操作大多属于IO等待(页面加载、响应等待等),多线程可以很好地利用等待空窗期执行其他任务,刚好适配你的并行搜索场景。你预设的提前创建浏览器实例池的思路是对的,搭配线程安全的Queue做任务分配即可,不会出现任务重复执行、线程阻塞的问题。

完整实现代码

import threading
import queue
from selenium import webdriver
import time

# 配置参数
NUM_OF_BROWSERS = 3 # 并行浏览器实例数量,建议不超过8个
WAIT_TIME = 2
SEARCH_BAR_XPATH = "你的搜索框xpath路径"
TARGET_SEARCH_URL = "你的目标搜索页地址"
queries = ["查询词1", "查询词2", "查询词3"] # 替换为你的查询词列表

# 1. 初始化任务队列,将所有查询词存入队列(原生线程安全,无需额外加锁)
task_queue = queue.Queue()
for q in queries:
    task_queue.put(q)

# 2. 初始化线程安全的结果存储和锁
return_data = []
data_lock = threading.Lock()

# 3. 单线程执行逻辑,每个线程绑定一个浏览器实例
def run_search(browser):
    while not task_queue.empty():
        # 从队列取查询词,队列空则退出当前线程
        try:
            query = task_queue.get_nowait()
        except queue.Empty:
            break
        
        # 执行原有搜索逻辑
        browser.get(TARGET_SEARCH_URL)
        browser.find_element('xpath', SEARCH_BAR_XPATH).send_keys(query)
        time.sleep(WAIT_TIME)
        
        try:
            # 替换为你的结果提取逻辑
            extract_res = "提取到的搜索结果"
            # 加锁写入结果,避免多线程写入冲突
            with data_lock:
                return_data.append(extract_res)
        except Exception as e:
            print(f"查询[{query}]执行出错:{str(e)}")
        finally:
            # 标记当前任务完成
            task_queue.task_done()

if __name__ == "__main__":
    # 4. 初始化浏览器实例池
    browsers = [webdriver.Chrome() for _ in range(NUM_OF_BROWSERS)]
    # 5. 启动所有工作线程
    threads = []
    for browser in browsers:
        t = threading.Thread(target=run_search, args=(browser,))
        t.start()
        threads.append(t)
    # 6. 等待所有线程执行完成
    for t in threads:
        t.join()
    # 7. 统一关闭所有浏览器实例
    for b in browsers:
        b.quit()
    
    # 所有任务执行结束,可按需处理return_data
    print(return_data)

注意事项

  • 浏览器数量不要设置过大,过多实例会占用过多内存、CPU资源反而拖慢整体运行速度,普通设备建议控制在3~6个即可
  • 代码中的time.sleep可以替换为Selenium的显式等待WebDriverWait,根据页面元素加载状态动态判断等待时间,能大幅减少无效等待耗时
  • 如果你使用的是4.6以上版本的Selenium,不需要手动指定ChromeDriver路径,Selenium会自动匹配对应浏览器版本的驱动,如有特殊路径需求可以用Service对象配置驱动路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:27:00