使用selenium的Python并行执行

2024-06-07 07:39:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python中使用selenium的并行执行感到困惑。似乎有一些方法可以解决这个问题,但有些似乎已经过时了。

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

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

例如https://saucelabs.com/blog/parallel-testing-with-python-and-selenium-on-sauce-online-workshop-recap

我们也有concurrent.future,这看起来更新了很多,但实现起来并不那么容易——有谁在selenium中有一个并行执行的工作示例吗?

也有使用线程和执行器来完成工作,但我觉得这会比较慢,因为它没有使用所有的核心,仍然以串行方式运行。


Tags: 模块and方法https功能comparallelon
2条回答

使用joblib's Parallel模块来实现这一点,它是一个很好的并行执行库。

假设我们有一个名为urls的url列表,并且我们希望并行拍摄每个url的屏幕快照

首先让我们导入必要的库

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文档中找到

为此,我创建了一个项目,它重用webdriver实例以获得更好的性能:

https://github.com/testlabauto/local_selenium_pool

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

相关问题 更多 >

    热门问题