我撰寫了一個類來創建 Selenium webdriver 的實體,然后廢棄一些資料。在單執行緒中一切正常,但是當我嘗試切換到多執行緒時,所有操作僅在一個瀏覽器中執行,另一個啟動但什么也沒發生。
這是我的多執行緒代碼
def run_downloader(account, date_range, company_name, invoice_type):
downloader = InvoiceDownloaderEnchanted(account=account,
date_range=date_range,
company_name=company_name,
invoice_type=invoice_type)
downloader.start_webdriver()
downloader.process()
if __name__ == '__main__':
with ThreadPoolExecutor(max_workers=2) as executor:
executor.map(run_downloader,
repeat((cfg.USERNAME, cfg.PASSWORD)),
repeat(('01/08/2022', '31/08/2022')),
repeat('Company Name'),
[InvoiceType.INWARD, InvoiceType.OUTWARD])
還有我的 webdriver 類初始化代碼:
class InvoiceDownloaderEnchanted:
def __init__(self,
account,
company_name: str,
invoice_type: InvoiceType,
date_range: tuple | None = None,
target_url: str | None = cfg.WEBSITE_URL
):
self.account = account
self.company_name = company_name
self.invoice_type = invoice_type
self.date_range = date_range
self.target_url = target_url
self.driver = None
def start_webdriver(self):
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--disable-gpu")
chrome_prefs = cfg.CHROME_PREFS
chrome_prefs['download.default_directory'] = self.download_folder
print(chrome_prefs['download.default_directory'])
chrome_options.add_experimental_option('prefs', chrome_prefs)
chrome_options.add_experimental_option("excludeSwitches", ['enable-automation'])
chrome_options.add_argument('--disable-blink-features=AutomationControlled')
chrome_options.add_argument("--remote-debugging-port=9222")
user_agent = UserAgent().random
chrome_options.add_argument(f'user-agent={user_agent}')
self.driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()),
options=chrome_options)
print(self.driver)
self.driver.maximize_window()
def process(self):
# Do scrapping stuffs
經過一些除錯后,我注意到download.default_directory當 iprint(chrome_prefs['download.default_directory'])但在chrome_options.experimental_options. 我檢查了兩個 webdriver 實體,driver.capabilities['chrome']['userDataDir]它們也不同:
<selenium.webdriver.chrome.webdriver.WebDriver (session="93cef277d1796c241cb75f729dec222f")>
<selenium.webdriver.chrome.webdriver.WebDriver (session="de08b1c6baad30587717082e41c294b5")>
有時我運行代碼,它只打開一個瀏覽器。我認為問題是兩個 webdriver 實體參考了一個變數或類似的東西,但不知道如何解決它。
uj5u.com熱心網友回復:
chrome_options.add_argument("--remote-debugging-port=9222")我通過從 start_webdrive中洗掉引數來修復它
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/523281.html
上一篇:異步運行多個行程
