GVKun编程网logo

在通过Python使用Selenium进行多处理时,Chrome在数小时后崩溃(python语言通过)

16

此处将为大家介绍关于在通过Python使用Selenium进行多处理时,Chrome在数小时后崩溃的详细内容,并且为您解答有关python语言通过的相关问题,此外,我们还将为您介绍关于centos7+

此处将为大家介绍关于在通过Python使用Selenium进行多处理时,Chrome在数小时后崩溃的详细内容,并且为您解答有关python语言通过的相关问题,此外,我们还将为您介绍关于centos7+python+selenium+chrome、Chrome浏览器通过Pythonselenium自动更新时如何使用特定版本的ChromeDriver、Cron无法通过Python找到selenium的Chromedriver的可执行路径、python selenium chrome 崩溃的有用信息。

本文目录一览:

在通过Python使用Selenium进行多处理时,Chrome在数小时后崩溃(python语言通过)

在通过Python使用Selenium进行多处理时,Chrome在数小时后崩溃(python语言通过)

这是经过数小时的抓取后的错误回溯:

The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.

这是我设置的硒蟒蛇:

#scrape.pyfrom selenium.common.exceptions import *from selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.chrome.options import Optionsdef 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.pyimport time,from multiprocessing import Poolfrom 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))

Chrome,ChromeDriver安装程序,Selenium版本

ChromeDriver 79.0.3945.36 (3582db32b33893869b8c1339e8f4d9ed1816f143-refs/branch-heads/3945@{#614})Google Chrome 79.0.3945.79Selenium Version: 4.0.0a3

我想知道为什么Chrome正在关闭,但其他进程正在运行?

答案1

小编典典

我获取了您的代码,对其进行了一些修改以适合我的 测试环境 ,这是执行结果:

  • 代码块:

    • 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))

    • scrape.py

          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 —


结论

很明显,您的程序在逻辑上是完美无缺的,而且非常完美。


这个用例

正如您提到的,在刮擦几个小时后出现了此错误,我怀疑这是由于WebDriver不是线程安全的。话虽如此,如果您可以序列化对底层驱动程序实例的访问,则可以在多个线程中共享一个引用。不建议这样做。但是您始终可以为每个线程实例化一个WebDriver实例。

理想情况下, 线程安全
问题不在您的代码中,而是在实际的浏览器绑定中。他们都假设一次只能有一个命令(例如,像真实用户一样)。但是另一方面,您始终可以为每个线程实例化一个
WebDriver 实例,这将启动多个浏览选项卡/窗口。到此为止,您的程序似乎是完美的。

现在,可以在同一 Webdriver 上运行不同的 线程
,但是测试结果将不是您期望的。背后的原因是,当您使用多线程在不同的选项卡/窗口上运行不同的测试时,需要一些线程安全编码,否则您将执行的操作将类似于或将转到当前具有的打开的选项卡/窗口。在
焦点* 不管的 线程 你希望运行。从本质上讲,这意味着所有测试将同时在具有 焦点 的同一选项卡/窗口上运行,而 不是
在预期的选项卡/窗口上运行。 __click()``send_keys()
__ *

centos7+python+selenium+chrome

centos7+python+selenium+chrome

1. 安装 chrome

yum install google-chrome

2. 安装 chromedriver
所有版本的下载地址:https://sites.google.com/a/chromium.org/chromedriver/downloads

wget https://chromedriver.storage.googleapis.com/2.39/chromedriver_linux64.zip
unzip chromedriver_linux64.zip

3.selenium

pip install selenium

 4. 例子

>>> from selenium import webdriver
>>> chrome_options = webdriver.ChromeOptions()
>>> chrome_options.add_argument(''--headless'')
>>> chrome_options.add_argument(''--no-sandbox'')  # 这句一定要加
#我一开始没加,就一直报‘selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally’。搞了很久。
>>> driver = webdriver.Chrome(executable_path=''/root/chromedriver'', chrome_options=chrome_options)
>>> driver.get(''http://py2app.readthedocs.io/en/latest/examples.html'')
>>> print driver.title
Example setup.py templates — py2app 0.15 documentation

  5. 注意

chromedriver 应该要给执行权限,也就是 chmod +x chromedriver,因为我为了解决 Chrome failed to start: exited abnormally 这个错误,做了很多尝试,也不知道这个是不是必须的,加了不会错

 

Chrome浏览器通过Pythonselenium自动更新时如何使用特定版本的ChromeDriver

Chrome浏览器通过Pythonselenium自动更新时如何使用特定版本的ChromeDriver

我是Selenium的新手,现在可以将selenium与Chromedriver一起使用以进行基本的自动测试,代码可以正常工作,但问题是Chrome浏览器始终在后端自动更新,并且代码始终在Chrome更新后无法运行。我知道我需要下载新的chromedriver来解决此问题,但是我想知道是否有任何方法可以在不禁用chromebrowser更新的情况下解决此问题?tks。

我正在使用Windows 10 / Chrome版本67 / Python 3.6.4 / Selenium 3.12.0

答案1

小编典典

,除了更新 ChromeDriver 二进制版本外,没有其他选择,而 Chrome浏览器 会不断自动更新。


原因

在添加,修改和删除现有功能后,会释放每个 Chrome浏览器 。为了符合当前的 浏览器功能 集, Chrome团队 会不时发布兼容的
ChromeDriver 二进制文件。这些 ChromeDriver 二进制文件能够与 Chrome浏览器 进行交互。某些版本的
ChromeDriver 二进制文件支持特定范围的 Chrome浏览器 版本(某些是最新版本),如下所示:

  • ChromeDriver v 84.0.4147.30 (2020-05-28)

    Supports Chrome version 84
  • ChromeDriver v 83.0.4103.39 (2020-05-05)

    Supports Chrome version 83
  • ChromeDriver v 82故意 跳过。

  • ChromeDriver v 81.0.4044.138 (2020-05-05)

    Supports Chrome version 81
  • ChromeDriver v 80.0.3987.106 (2020-02-13)

    Supports Chrome version 80
  • ChromeDriver v 79.0.3945.36 (2019-11-18)

    Supports Chrome version 79
  • ChromeDriver v 78.0.3904.70 (2019-10-21)

    Supports Chrome version 78
  • ChromeDriver v 77.0.3865.40 (2019-08-20)

    Supports Chrome version 77
  • ChromeDriver v 76.0.3809.126 (2019-08-20)

    Supports Chrome version 76
  • ChromeDriver v 75.0.3770.8 (2019-04-29)

    Supports Chrome version 75
  • ChromeDriver v 74.0.3729.6 (2019-03-14)

    Supports Chrome version 74
  • ChromeDriver v 73.0.3683.68 (2019-03-06)

    Supports Chrome version 73
  • ChromeDriver v 2.46 (2019-02-01)

    Supports Chrome v71-73
  • ChromeDriver v 2.45 (2018-12-10)

    Supports Chrome v70-72
  • ChromeDriver v 2.44 (2018-11-19)

    Supports Chrome v69-71
  • ChromeDriver v 2.43 (2018-10-16)

    Supports Chrome v69-71
  • ChromeDriver v 2.42 (2018-09-13)

    Supports Chrome v68-70
  • ChromeDriver v 2.41 (2018-07-27)

    Supports Chrome v67-69
  • ChromeDriver v 2.40 (2018-06-07 )

    Supports Chrome v66-68
  • ChromeDriver v 2.39 (2018-05-30)

    Supports Chrome v66-68
  • ChromeDriver v 2.38 (2018-04-17 )

    Supports Chrome v65-67
  • ChromeDriver v 2.37 (2018-03-16 )

    Supports Chrome v64-66
  • ChromeDriver v 2.36 (2018-03-02 )

    Supports Chrome v63-65
  • ChromeDriver v 2.35 (2018-01-10 )

    Supports Chrome v62-64
  • ChromeDriver v 2.34 (2017-12-10 )

    Supports Chrome v61-63
  • ChromeDriver v 2.33 (2017-10-03)

    Supports Chrome v60-62
  • ChromeDriver v 2.32 (2017-08-30)

    Supports Chrome v59-61
  • ChromeDriver v 2.31 (2017-07-21)

    Supports Chrome v58-60
  • ChromeDriver v 2.30 (2017-06-07)

    Supports Chrome v58-60
  • ChromeDriver v 2.29 (2017-04-04)

    Supports Chrome v56-58

结论

要使脚本/程序与更新的 Chrome浏览器 保持交互,您必须根据 兼容性将ChromeDriver 二进制版本与 Chrome浏览器 保持同步。

Cron无法通过Python找到selenium的Chromedriver的可执行路径

Cron无法通过Python找到selenium的Chromedriver的可执行路径

如何解决Cron无法通过Python找到selenium的Chromedriver的可执行路径?

在 Spyder 中一切正常。我想在特定时间运行 Python 脚本,所以我使用了 crontab。我的编码是

SHELL=/bin/zsh
PATH=/usr/local/bin/:/usr/bin:/usr/sbin

46 01 * * * /Users/myusername/opt/anaconda3/bin/python /Users/myusername/Documents/Lynn\''s\ Python\ work/shopee/shopee_main.py >>/Users/myusername/Desktop/out.log

在我的 Python 中编写关于 Chromedriver 的代码是

options = webdriver.ChromeOptions()
options.add_argument(''--headless'')
browser = webdriver.Chrome(chrome_options=options,executable_path=os.getcwd()+''/chromedriver'')

我不熟悉 crontab 和 Linux,我一直在寻找大量信息,就是无法解决。请帮帮我? 感谢每一个帮助?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

python selenium chrome 崩溃

python selenium chrome 崩溃

from selenium import webdriver
option = webdriver.ChromeOptions()
# 防止崩溃
option.add_argument("""--no-sandBox""")
# 谷歌文档提到需要加上这个属性来规避bug
option.add_argument("""--disable-gpu""")
wd = webdriver.Chrome(options=option)

关于在通过Python使用Selenium进行多处理时,Chrome在数小时后崩溃python语言通过的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于centos7+python+selenium+chrome、Chrome浏览器通过Pythonselenium自动更新时如何使用特定版本的ChromeDriver、Cron无法通过Python找到selenium的Chromedriver的可执行路径、python selenium chrome 崩溃等相关内容,可以在本站寻找。

本文标签: