当前位置: 首页 > 知识库问答 >
问题:

在通过Python使用硒进行多处理时,Chrome会在几个小时后崩溃

彭衡
2023-03-14
The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.
#scrape.py
from selenium.common.exceptions import *
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.chrome.options import Options

def run_scrape(link):
    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 = "/usr/bin/google-chrome"
    browser = webdriver.Chrome(executable_path=r'/usr/local/bin/chromedriver', options=chrome_options)
    browser.get(<link passed here>)
    try:
        #scrape process
    except:
        #other stuffs
    browser.quit()
#multiprocess.py
import time,
from multiprocessing import Pool
from scrape import *

if __name__ == '__main__':
    start_time = time.time()
    #links = list of links to be scraped
    pool = Pool(20)
    results = pool.map(run_scrape, links)
    pool.close()
    print("Total Time Processed: "+"--- %s seconds ---" % (time.time() - start_time))
ChromeDriver 79.0.3945.36 (3582db32b33893869b8c1339e8f4d9ed1816f143-refs/branch-heads/3945@{#614})
Google Chrome 79.0.3945.79
Selenium Version: 4.0.0a3

我想知道为什么chrome正在关闭,而其他进程正在工作?

共有1个答案

端木元青
2023-03-14

我使用了您的代码,对其进行了一些修改以适应我的测试环境,下面是执行结果:

>

  • 代码块:

    >

  • multiprocess.py:

    import time
    from multiprocessing import Pool
    from multiprocessingPool.scrape import run_scrape
    
    if __name__ == '__main__':
        start_time = time.time()
        links = ["https://selenium.dev/downloads/", "https://selenium.dev/documentation/en/"] 
        pool = Pool(2)
        results = pool.map(run_scrape, links)
        pool.close()
        print("Total Time Processed: "+"--- %s seconds ---" % (time.time() - start_time)) 
    
    from selenium import webdriver
    from selenium.common.exceptions import NoSuchElementException, TimeoutException
    from selenium.webdriver.common.by import By
    from selenium.webdriver.chrome.options import Options
    
    def run_scrape(link):
        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)
        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.248600006103516 seconds ---
    

  •  类似资料:
    • 问题内容: 这是经过数小时的抓取后的错误回溯: 这是我设置的硒蟒蛇: Chrome,ChromeDriver安装程序,Selenium版本 我想知道为什么Chrome正在关闭,但其他进程正在运行? 问题答案: 我获取了您的代码,对其进行了一些修改以适合我的 测试环境 ,这是执行结果: 代码块: multiprocess.py : from multiprocessing import Pool f

    • 前言:所以我有这个,其实应用程序并不是那么重要,它是一个tcp侦听器,整天用一些硬件聊天。但它也有一些展示的东西。显示屏在屏幕的不同区域显示不同的自定义节点,屏幕底部是一个网格,显示一些“东西”,但当没有任何“东西”时,它会在屏幕上滚动一些文本。 问题:正如我将在我构建时间线的方法中发布的那样,有一个Text元素可以在整个屏幕上从右向左过渡。这在第一个小时或可能两个小时内按预期工作,但过了一段时间

    • 主要目的是在一个容器中运行多个chrome浏览器(9个浏览器)。 我有一个hub&node设置,容器中有多个浏览器,可以在一个chrome node容器中运行。我用下面的docker命令创建了两个容器: 要创建集线器容器:dockerrun-d-p4445:4444--名称为selenium_hub selenium/hub

    • 你能解释一下,当作为一个单独的进程执行辅助函数时,我是如何防止python GUI冻结的吗? 我编写了一个python GUI,点击一个按钮,就可以通过多处理模块启动一个进程。我决定使用多处理而不是线程,因为我喜欢选择启动、暂停、恢复和终止进程。 不幸的是,当辅助进程运行时,GUI会冻结并失去响应,因此我无法按下“暂停”按钮。 图形用户界面的冻结问题在stackoverflow上报告过几次,但是这

    • 问题内容: 在Python中,该模块可用于在一系列值上并行运行函数。例如,这将生成f的前100000个评估的列表。 当f接受多个输入而只有一个变量变化时,是否可以做类似的事情?例如,如何并行处理此: 问题答案: 有几种方法可以做到这一点。在问题给出的示例中,您可以定义一个包装函数 然后将此包装传递给。一种更通用的方法是使用一个包装器,该包装器使用一个元组参数并将该元组解包为多个参数 或使用等效的l

    • 问题内容: 如何在几天,几小时,几周或几个月后迭代一个时间跨度? 就像是: 其中foo是一个函数,返回一个迭代器。我一直在研究日历模块,但是它仅适用于特定的一年或一个月,不适用于日期之间。 问题答案: 使用dateutil及其rrule实现,如下所示: 输出为 将“每月”替换为“每年”,“每月”,“每周”,“每天”,“每小时”,“半年”或“第二”。替换dtstart,直到您想要的任何datetim