- 此问题在此处已有答案**:
Python selenium multiprocessing(3个答案)
4天前关闭。
我正尝试使用Python同时运行两个(或更多)Selenium webdriver
到目前为止,我已经尝试过使用Python的多处理模块,我是这样使用它的:
def _():
sets = list()
pool = Pool()
for i in range(len(master)):
driver = setProxy(proxy,f'Tread#{i+1}')
sets.append(
[f'Thread#{i+1}',
driver,
master[i]]
)
for i in range(len(sets)):
pool.apply_async(enterPoint, args=(sets[i][0],sets[i][1],sets[i][2]))
pool.close()
pool.join()
上面的函数调用setProxy()
来获取一个设置了代理的驱动程序示例,该示例运行良好,打开chromedriver len(master)
的次数和访问一个链接来检查IP。sets
列表是一个列表列表列表,由3个对象组成,分别是线程号、将运行的驱动程序和驱动程序将使用的数据列表。池的apply_async()
应该运行enterPoint()
len(sets)
次,args
是线程号、驱动程序和数据以下是enterPoint代码:
def enterPoint(thread,driver,accounts):
print('I exist!')
for account in accounts:
cEEPE(thread,driver,account)
但是,"I exist"语句从来不会在我运行应用程序的CLI中打印出来。cEEPE()
就是神奇的地方。我测试了我的代码,没有对它应用多处理,它正常工作。我怀疑Pool的apply_async()
方法有问题,我可能用错了方法。
3条答案
按热度按时间ht4b089n1#
问题中提供的代码是孤立的,因此很难评论,但我会考虑使用这个过程描述的问题:
1.导入
multiprocessing
和selenium
1.使用
start
和join
方法。这将产生您所要求的两个(或更多)进程。
uyto3xhc2#
所以,我得到了上面的代码工作,这里是我如何修复它:而不是像这样编写
apply_async()
方法:我是这样写:
但尽管如此,这并不能解决我的问题,因为我希望enterPoint同时运行两次。
ckx4rj1h3#
它可以通过SeleniumBase轻松完成,SeleniumBase可以进行多线程测试(例如:
-n=3
用于3个线程),甚至设置代理服务器(--proxy=USER:PASS@SERVER:PORT
)pip install seleniumbase
,然后运行python
:(This示例使用参数化将一个测试转换为三个不同的测试。)您还可以将多线程应用于多个文件等。