簡體   English   中英

如何在Python中將多處理與Selenium結合使用

[英]How to use Multiprocessing with Selenium in Python

我正在嘗試在python中使用硒處理多重處理。 我的代碼如下:

from selenium import webdriver
from multiprocessing import Pool
import xlwings as xw

driver = webdriver.Chrome('chromedriver.exe')
driver.get("https://example.com")

wb = xw.Book('my_file.xlsm')
sht = wb.sheets["Sheet1"]
final_list = []

search = driver.find_element_by_id("ContentPlaceHolder1_txtByName")
for item in search:
       z = item.find_element_by_class_name("valuetext")
       info = z.find_element_by_tag_name("span")
       final_list.append(info.text)

def automate(num):
    col = num
    list_item = final_list[num]   
    sht.range(1, col).value = each


if __name__ == '__main__':

    p = Pool(processes=4)
    data = p.map(automate,range(1,20))        

我遇到的問題是網頁的這四個過程中的每個過程都被重新打開了,我不明白為什么。 如果p.map僅針對automate函數,那么為什么其余代碼會在每個進程中運行?

我仍然對多處理還不陌生,所以不確定這是否是它的工作方式嗎?是否有另一種方法可以確保進程僅針對函數本身,還是可以使用線程?

多處理文檔的示例中,他們建議將Pool與上下文管理器一起使用,即

with Pool(processes=4) as pool: print(pool.map(f, range(10))

我立即在您的使用和文檔之間看到了最突出的區別。 我看不出它的詳細說明,但我根據您的觀察推斷,該框架正在其所產生的每個過程中“重新導入”(可以這么說)您的模塊,這導致了您報告的行為:多個瀏覽器打開。

為了防止這種情況,我建議將初始化代碼放在函數中; 如果你想分享的final_list ,你應該有一個這樣做的隊列支撐或其他數據結構multiprocess

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM