python Selenium網頁爬蟲多線程并發執行偶爾報錯原因及解決方法
本文分析了使用Python和Selenium進行網頁爬蟲,并將動態html保存為PDF文件時,多線程并發執行偶爾報錯,而單線程執行卻正常運行的問題。
問題描述
項目需求需要將動態HTML頁面轉換為PDF。我們使用Python和Selenium,通過page.printToPdf命令獲取PDF數據并保存。為了提高效率,采用了多線程并發執行。然而,多線程環境下偶爾出現錯誤,單線程執行則一切正常。
問題代碼及錯誤信息
以下代碼片段用于測試:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service # ... other imports ... def test(): service_obj = Service(r"d:workchromedriver-win64chromedriver.exe") options_obj = Options() options_obj.binary_location = r"d:workchrome-win64chrome.exe" options_obj.add_argument('--no-sandbox') options_obj.add_argument('--disable-gpu') # options_obj.add_argument("--remote-debugging-port=9225") # problematic line options_obj.add_argument("--incognito") # ... other options ... driver = webdriver.Chrome(options=options_obj, service=service_obj) print(driver.session_id) driver.get("https://www.baidu.com") driver.quit() if __name__ == '__main__': threads = [threading.Thread(target=test) for _ in range(3)] for t in threads: t.start()
錯誤信息如下:
立即學習“Python免費學習筆記(深入)”;
Exception in thread Thread-2: Traceback (most recent call last): ... selenium.common.exceptions.WebDriverException: Message: disconnected: unable to receive message from renderer (Session info: chrome=120.0.6099.71)
原因分析與解決方案
問題根源在于(已注釋掉的)options_obj.add_argument(“–remote-debugging-port=9225”) 這行代碼。它指定了Chrome的遠程調試端口為9225。多線程并發執行時,多個線程試圖同時使用該端口,導致端口沖突,引發WebDriverException。
解決方案:
-
移除遠程調試端口參數: 直接刪除 options_obj.add_argument(“–remote-debugging-port=9225”) 這行代碼,避免端口沖突。這是最簡單直接的解決方法。
-
為每個線程分配不同的端口: 如果需要使用遠程調試功能,可以為每個線程分配不同的端口:
def test(port): options_obj.add_argument(f"--remote-debugging-port={port}") # ... rest of the code ... if __name__ == '__main__': ports = [9225, 9226, 9227] threads = [threading.Thread(target=test, args=(port,)) for port in ports] for t in threads: t.start()
通過以上方法,可以有效解決多線程并發執行時出現的端口沖突問題,確保Selenium爬蟲的穩定運行。 建議優先采用第一種方法,除非有明確需要使用遠程調試功能。 此外,考慮使用更高級的并發控制機制,例如進程池,以更好地管理資源并提高效率。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END
喜歡就支持一下吧
相關推薦