首页 > 解决方案 > 如何使用 Python 在 Selenium 中同时运行多个 webdriver 进程?

问题描述

我有一个包含数千个 URL 的列表。我想使用 Python/Selenuim 来:

  1. 加载每个 URL,
  2. 选择一个元素
  3. 关闭页面

为了让它运行得更快,我想并行运行很多这些进程,但我只能一次搞定如何做一个。

from selenium import webdriver
driver = webdriver.Chrome()

url_list = [
            'https://www.instagram.com/p/Bj7NmpqBuSw/?tagged=style', 
            'https://www.instagram.com/p/Bj7Nic3Au85/?tagged=style'
            ]

for url in url_list:
    driver.get(url)
    driver.find_elements_by_class_name("class-name-for-profile-link")
    driver.close()

​我尝试使用很多浏览器标签

driver.switch_to.window(driver.window_handles[1])

但是手柄有点难以管理。

如何并行运行此过程?

标签: pythonpython-3.xselenium-webdriverconcurrency

解决方案


tl;博士我创建了这个 gist来给出一个简单的例子来说明如何并行运行简单的 Selenium 任务。您可以根据自己的目的对其进行调整。


并行化 Selenium 脚本的问题在于 Selenium 工作者本身就是进程。上面的脚本使用了两个FIFO 队列,一个存储空闲 Selenium 工作人员的 ID,另一个存储要传递给工作人员的数据。后台主线程侦听这两个队列并将传入数据分配给空闲的工作人员,在工作人员工作时将硒工作人员的 ID 从工作人员队列中取出。

要使代码适应您的目的,您需要做的就是更改函数中的代码selenium_task。希望这可以帮助!


推荐阅读