python - 如何使用 Python Selenium 使用多进程池
问题描述
我有一些代码需要从数百个网页中获取数据,我想通过为它运行多个 Selenium Chrome 浏览器实例来加快速度。例如我在这里有这个代码:
from selenium import webdriver
from multiprocessing import Pool
from tkinter import *
#initiate browser
def browser():
global driver
driver = webdriver.Chrome(r"C:\Users\areed\Desktop\p\chromedriver.exe")
return driver
#test link
def test():
links = [link1.com, link2.com, link3.com, link4.com]
browser()
for l in links:
driver.get(l)
dostuff(driver)
#Scrape Data
def dostuff(driver):
print('doing Stuff')
#multiprocess Function
def multip():
pool = Pool(processes=4)
pool.map(test())
#tkinter Window
if __name__ == "__main__":
win = Tk()
win.title("test")
win.geometry('300x200')
btn = Button(win, text="Tester", command=multip)
btn.pack()
win.mainloop()
我怎样才能使它的代码运行多个 selenium chrome 浏览器?该代码无需添加多进程即可正常工作。有人可以向我解释如何解决这个问题。谢谢!
解决方案
我编写了多进程的示例代码。
您可以将链接设置为 test() 函数的参数。
每个浏览器将导航到不同的链接。
from selenium import webdriver
from multiprocessing import Pool
# I remove global driver because you cannot use shared driver in multiprocess.
def browser():
driver = webdriver.Chrome()
return driver
def test_func(link):
driver = browser() # Each browser use different driver.
driver.get(link)
def multip():
links = ["https://stackoverflow.com/", "https://signup.microsoft.com/"]
pool = Pool(processes=3)
for i in range(0, len(links)):
pool.apply_async(test_func, args={links[i]})
pool.close()
pool.join()
if __name__ == '__main__':
multip()
我已经尝试了上面的代码并成功了。
推荐阅读
- tensorflow - 用于连接层的 LSTM
- python - 满足多个条件的列表组合
- nginx - NGINX 中的多个“中继” - 有可能吗?
- javascript - 检查 react-native npm 包的最低 Android(Sdk) 版本
- ios - 尝试从 android studio 打开时,Xcode 中的 Flutter 打开模块会出错?
- c# - C# 更改先前分配的值
- python - sklearn模型预测在dask网格上
- python - 与 Bronkhorst 质量流量传感器通信 - 设备没有序列号?
- apache-spark - 使用 Apache Spark 3 从 Cosmos DB 流式传输数据
- kubernetes - Trino 舵图