使用selenium进行Python并行执行

时间:2017-03-11 08:12:46

标签: python selenium parallel-processing concurrent.futures

我对使用selenium在python中执行并行执行感到困惑。似乎有几种方法可以解决,但有些似乎已经过时了。

我想知道使用selenium进行并行执行的最新方法是什么?

有一个名为python-wd-parallel的python模块似乎有一些功能可以做到这一点,但它是从2013年开始的,这现在仍然有用吗?

e.g。 https://saucelabs.com/blog/parallel-testing-with-python-and-selenium-on-sauce-online-workshop-recap

我们还有concurrent.future,这似乎更新,但实现起来并不那么容易 - 任何人都有一个在selenium中并行执行的工作示例?

还有使用线程和执行程序来完成工作,但我觉得这会慢一点,因为它没有使用所有内核,仍然以串行形式运行。

2 个答案:

答案 0 :(得分:3)

使用joblib's Parallel模块来做到这一点,它是一个很棒的并行执行库。

假设我们有一个名为urls的网址列表,我们想要并行截取每个网址

首先让我们导入必要的库

from selenium import webdriver
from joblib import Parallel, delayed

现在让我们定义一个将截图设为base64的函数

def take_screenshot(url):
    phantom = webdriver.PhantomJS('/path/to/phantomjs')
    phantom.get(url)
    screenshot = phantom.get_screenshot_as_base64()
    phantom.close()

    return screenshot

现在要并行执行你要做的是

screenshots = Parallel(n_jobs=-1)(delayed(take_screenshot)(url) for url in urls)

当此行完成执行时,您将获得screenshots所有已运行进程的所有数据。

关于并行的说明

  • Parallel(n_jobs=-1)表示您可以使用所有资源
  • delayed(function)(input)joblib为您尝试并行运行的函数创建输入的方法

可以在joblib文档

上找到更多信息

答案 1 :(得分:0)

我创建了一个项目来做到这一点,并且它重复使用了webdriver实例以提高性能:

https://github.com/testlabauto/local_selenium_pool

https://pypi.org/project/local-selenium-pool/