我对使用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中并行执行的工作示例?
还有使用线程和执行程序来完成工作,但我觉得这会慢一点,因为它没有使用所有内核,仍然以串行形式运行。
答案 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实例以提高性能: