我正在尝试并行执行循环,该循环使用Selenium从网站检索数据。在我的循环中,我遍历了之前创建的URL URLlist
的列表。
首先,我登录到该页面,然后创建Webdriver的实例。
browser = webdriver.Chrome(executable_path='chromedriver.exe')
browser.get('https://somepage.com')
username = browser.find_element_by_id("email")
password = browser.find_element_by_id("password")
username.send_keys("foo@bar.com")
password.send_keys("pwd123")
browser.find_element_by_id("login-button").click()
然后我的循环开始并调用一些在页面上运行的函数。
for url in URLlist:
browser.get(url)
data1 = do_stuff()
data2 = do_other_stuff()
我不太知道从哪里开始,因为我可以想象每个线程都需要一个webdriver实例。
什么是正确的(也许是最简单的)方法?
答案 0 :(得分:0)
您需要在单独的.py文件中创建测试方法,安装pytest库软件包,然后使用pytest调用.py文件。从cmd启动python并尝试以下方法:
-m pytest -n 3 C:\test_file.py --html=C:\Report.html
在这种情况下,三种测试方法将并行运行
答案 1 :(得分:0)
要简化并行抓取,您需要安装numpy。
python -m pip install numpy
完成此操作后,您可以轻松实现所需的目标。这是一个简单的示例:
import threading
import numpy as np
#tupel to save the Threads
threads = []
threadCount = 5 #Number of Threads you want
#Custom Thread class
class doStuffThread(threading.Thread):
def __init__(self, partLinks):
threading.Thread.__init__(self)
self.partLinks = partLinks
def run(self):
#New browser instance for each Thread
browser = webdriver.Chrome(executable_path='chromedriver.exe')
for link in self.partLinks:
browser.get(link)
doStuff(link)
doOtherStuff(link)
#Split the links to give each thread a part of them
for partLinks in np.array_split(links,threadCount):
t = CommentCrawlerThread(partlinks)
threads.append(t)
t.start()
#wait till all Threads are finished
for x in threads:
x.join()