Python 如何使用threadpool退出chrome会话?

Python 如何使用threadpool退出chrome会话?,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,chromedriver在工作人员完成后退出,现在我的问题是有chrome浏览器的实例没有退出?是否有一种方法可以将其存储在threadLocal中?当您为每个线程实例化一个实例时,尽管这种方法将启动多个浏览上下文,但从概念上讲,您的程序看起来很好 要退出线程池中的ChromeDriver/Chrome会话,必须分别为每个实例化的工作线程调用quit()。但是,我会避免在threadLocal中存储任何会话的尝试,以避免潜在的错误 因此,我稍微修改了您的代码试用版,添加了quit(),它将针对每

chromedriver在工作人员完成后退出,现在我的问题是有chrome浏览器的实例没有退出?是否有一种方法可以将其存储在threadLocal中?

当您为每个线程实例化一个实例时,尽管这种方法将启动多个浏览上下文,但从概念上讲,您的程序看起来很好

退出线程池中的ChromeDriver/Chrome会话,必须分别为每个实例化的工作线程调用
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 ---