首页 > 解决方案 > python selenium browser.quit() 方法进程安全吗?

问题描述

我正在使用多处理池运行多个浏览器。每个进程也将一遍又一遍地打开和关闭浏览器。每个进程关闭浏览器并打开新浏览器的原因是,如果不是,我正在访问的网站将在第二次访问时被验证码阻止。如果每个进程调用browser.quit()它会影响在其他进程中运行的chrome实例吗?当我知道它们是好的 URL 时,我遇到了一些网站失败的问题。

编辑:让我进一步解释。Selenium 访问该站点,我返回 HTML 进行抓取。我在日志文件中收到的错误:

Failed While scraping 
object of type 'NoneType' has no len()

硒代码示例:


def get_page(url):
    browser = webdriver.Chrome(executable_path=r'chromedriver.exe')
    time.sleep(2)
    browser.get(url)
    
    # verify page
    if browser.current_url[-19:] == 'noResultsFound=true' or browser.current_url[-13:] == 'error404.html':
        browser.quit()
        return None
    else:
        html = browser.page_source
        browser.quit()
        return html

示例抓取代码:

def scrape(html):
    
    soup = BeautifulSoup(html, 'html.parser')
    search_items = soup.find('div', {'class': 'row product-grid results'})
    if search_items is not None:
        search_items = search_items.find_all('div', {'class': 'col-xs-12 col-xs-6 col-sm-4 col-md-3 text-center'})

    for i in range(len(search_items)):
        # scrape each search result

我可以访问 URL 并验证<div>s 确实存在,但是我通过获取长度在 for 循环中失败了。我的想法是 JavaScript 在返回 page_source 之前没有完全加载到页面上,或者另一个进程调用browser.quit()会影响其他进程。

标签: pythonseleniummultiprocessingselenium-chromedriver

解决方案


推荐阅读