【发布时间】:2022-10-07 20:27:09
【问题描述】:
我正在研究这个浏览器自动化项目,它并行执行一些浏览器任务。这个想法是:
- 打开四个浏览器
- 做一些任务
- 在我们关闭所有浏览器之前等待所有浏览器完成任务
这是一个用于演示目的的简单 Web 驱动程序函数。
# For initializing webdriver
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
def initialize_driver(starting_url: str = 'https://www.google.com/'):
''' Open a webdriver and go to Google
'''
# Webdriver option(s): keep webdriver opened
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
# Initialize webdriver
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()),
options=chrome_options)
# Open website; wait until fully loaded
driver.get(starting_url)
driver.implicitly_wait(10)
time.sleep(1)
return driver
使用这个函数,我现在可以使用multiprocessing 创建四个并行运行的作业。
# Import package
import multiprocessing as mp
# List of workers
workers = []
# Run in parallel
for _ in range(4):
worker = mp.Process(target=phm2.worker_bot_test)
worker.start()
workers.append(worker)
for worker in workers:
worker.join()
这些已经涵盖了前两点,但据我所知,我们一次只能使用driver.close() 关闭一个 webdriver。有没有一种方法可以一次性关闭它们?我实际上尝试创建一个 webdrivers 列表并在函数末尾附加一个 webdriver。然后,一一关闭。但由于某种原因,它不起作用。
# I added drivers.append(driver) at the end of the function from earlier
# This will now be a global variable to store the list of drivers
drivers = []
# Insert multiprocessing code here...
# Close all drivers
for driver in drivers:
driver.close()
我可以尝试做些什么来完成最后一步?我一直看到我们可以调整Process 类以包含返回值(有返回值将是一个很大的帮助),但是,我尽可能不想这样做,因为它有点复杂。
【问题讨论】:
标签: python selenium selenium-webdriver multiprocessing selenium-chromedriver