Python 如何使用threadpool退出chrome会话?
chromedriver在工作人员完成后退出,现在我的问题是有chrome浏览器的实例没有退出?是否有一种方法可以将其存储在threadLocal中?当您为每个线程实例化一个实例时,尽管这种方法将启动多个浏览上下文,但从概念上讲,您的程序看起来很好 要退出线程池中的ChromeDriver/Chrome会话,必须分别为每个实例化的工作线程调用Python 如何使用threadpool退出chrome会话?,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,chromedriver在工作人员完成后退出,现在我的问题是有chrome浏览器的实例没有退出?是否有一种方法可以将其存储在threadLocal中?当您为每个线程实例化一个实例时,尽管这种方法将启动多个浏览上下文,但从概念上讲,您的程序看起来很好 要退出线程池中的ChromeDriver/Chrome会话,必须分别为每个实例化的工作线程调用quit()。但是,我会避免在threadLocal中存储任何会话的尝试,以避免潜在的错误 因此,我稍微修改了您的代码试用版,添加了quit(),它将针对每
quit()
。但是,我会避免在threadLocal中存储任何会话的尝试,以避免潜在的错误
因此,我稍微修改了您的代码试用版,添加了quit()
,它将针对每个工作线程实例化单独调用,下面是执行结果:
- 代码块:
- multiprocess.py:
- scrape.py:
- 控制台输出:
#scrape.py import threading from selenium import webdriver from selenium.common.exceptions import NoSuchElementException, TimeoutException from selenium.webdriver.chrome.options import Options threadLocal = threading.local() def get_driver(): browser = getattr(threadLocal, 'browser', None) if browser is None: chrome_options = Options() chrome_options.add_argument('--no-sandbox') chrome_options.add_argument("--headless") chrome_options.add_argument('--disable-dev-shm-usage') chrome_options.add_argument("--lang=en") chrome_options.add_argument("--start-maximized") chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36") chrome_options.binary_location=r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe' browser = webdriver.Chrome(executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe', options=chrome_options) setattr(threadLocal, 'browser', browser) return browser def run_scrape(link): browser = get_driver() browser.get(link) try: print(browser.title) except (NoSuchElementException, TimeoutException): print("Error") browser.quit()
#multiprocess.py
from scrape import run_scrape
from multiprocessing.pool import ThreadPool
if __name__ == '__main__':
start_time = time.time()
#links = list of links to be scraped
pool = ThreadPool(20)
results = pool.map(run_scrape, links)
print("Total Time Processed: "+"--- %s seconds ---" % (time.time() - start_time))
from scrape import run_scrape
from multiprocessing.pool import ThreadPool
import time
if __name__ == '__main__':
start_time = time.time()
links = ["https://selenium.dev/downloads/", "https://selenium.dev/documentation/en/"]
pool = ThreadPool(20)
results = pool.map(run_scrape, links)
print("Total Time Processed: "+"--- %s seconds ---" % (time.time() - start_time))
#scrape.py
import threading
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException, TimeoutException
from selenium.webdriver.chrome.options import Options
threadLocal = threading.local()
def get_driver():
browser = getattr(threadLocal, 'browser', None)
if browser is None:
chrome_options = Options()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument("--headless")
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument("--lang=en")
chrome_options.add_argument("--start-maximized")
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)
chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36")
chrome_options.binary_location=r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
browser = webdriver.Chrome(executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe', options=chrome_options)
setattr(threadLocal, 'browser', browser)
return browser
def run_scrape(link):
browser = get_driver()
browser.get(link)
try:
print(browser.title)
except (NoSuchElementException, TimeoutException):
print("Error")
browser.quit()
Downloads
The Selenium Browser Automation Project :: Documentation for Selenium
Total Time Processed: --- 10.329657554626465 seconds ---