Selenium:WebDriverException:Chrome无法启动:由于google-chrome不再运行而崩溃,因此ChromeDriver认为Chrome崩溃了

时间:2018-10-30 21:54:06

标签: python selenium google-chrome selenium-webdriver selenium-chromedriver

我知道关于这个问题有几个答案,但是到目前为止,对我来说没有任何作用,因此我要发布一个新问题。

最近我切换了计算机,从那时起,我无法使用硒启动chrome。我也尝试过Firefox,但浏览器无法启动。

from selenium import webdriver

d = webdriver.Chrome('/home/PycharmProjects/chromedriver')

d.get('https://www.google.nl/')

我收到以下错误:

selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: crashed
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /opt/google/chrome/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
  (Driver info: chromedriver=2.43.600233, platform=Linux 4.15.0-38-generic x86_64)

我已安装了最新的chrome版本和chromedriver

编辑: 尝试@ b0sss解决方案后,出现以下错误。

selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: crashed
  (chrome not reachable)
  (The process started from chrome location /opt/google/chrome/google-chrome is no longer running, so chromedriver is assuming that Chrome has crashed.)
  (Driver info: chromedriver=2.43.600233 (523efee95e3d68b8719b3a1c83051aa63aa6b10d),platform=Linux 4.15.0-38-generic x86_64)

17 个答案:

答案 0 :(得分:9)

尝试在此处下载并使用此最新版chrome驱动程序。

https://sites.google.com/a/chromium.org/chromedriver/downloads

编辑:

尝试一下:

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
d = webdriver.Chrome('/home/PycharmProjects/chromedriver',chrome_options=chrome_options)
d.get('https://www.google.nl/')

答案 1 :(得分:7)

此错误消息...

selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: crashed
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /opt/google/chrome/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)

...表示 ChromeDriver 无法启动/产生新的 WebBrowser ,即 Chrome浏览器会话。

您的主要问题是系统中默认位置中未安装 Chrome 浏览器。

服务器(例如 ChromeDriver )希望您按照以下图片在每个系统的默认位置中安装 Chrome

Chrome_binary_expected_location

1 对于Linux系统,ChromeDriver希望/usr/bin/google-chrome是实际Chrome二进制文件的符号链接。


解决方案

如果您在非标准位置使用 Chrome 可执行文件,则必须覆盖Chrome二进制位置。,如下所示:

  • Python 解决方案:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.binary_location = "C:\\path\\to\\chrome.exe"
    driver = webdriver.Chrome(chrome_options = options, executable_path=r'C:\path\to\chromedriver.exe')
    driver.get('http://google.com/')
    print("Chrome Browser Invoked")
    driver.quit()
    
  • Java 解决方案:

Chrome executable in a non-standard location

答案 2 :(得分:3)

我遇到了在Docker容器上运行的确切问题(在构建环境中)。将ssh放入容器后,我尝试手动运行测试,但仍然遇到

(unknown error: DevToolsActivePort file doesn't exist)
     (The process started from chrome location /usr/bin/google-chrome-stable is 
      no longer running, so ChromeDriver is assuming that Chrome has crashed.)

当我尝试在本地/usr/bin/google-chrome-stable上运行chrome时,错误消息

Running as root without --no-sandbox is not supported

我检查了我的ChromeOptions,但它缺少--no-sandbox,这就是为什么它无法生成Chrome的原因。

capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
  chromeOptions: { args: %w(headless --no-sandbox disable-gpu window-size=1920,1080) }
)

答案 3 :(得分:3)

在我的情况下,错误是与www-data用户有关的,而与开发中的普通用户无关。该错误是为此用户初始化x显示的问题。因此,在不打开浏览器窗口而无头的情况下运行我的硒测试,此问题已解决:

opts.set_headless(True)

答案 4 :(得分:3)

我遇到了类似的问题,并且发现选项参数必须按特定顺序。我只知道在Ubuntu 18机器上运行此功能所需的两个参数。此示例代码对我有效:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')

d = webdriver.Chrome(executable_path=r'/home/PycharmProjects/chromedriver', chrome_options=options)
d.get('https://www.google.nl/')

答案 5 :(得分:2)

没有其他人说过但对我有用的简单解决方案,在没有sudo或没有root的情况下无法运行。

答案 6 :(得分:1)

对于RobotFramework

我解决了!使用<ComplianceDetails key={deviceId} deviceId={deviceId} />

--no-sandbox

代替

${chrome_options}=  Evaluate  sys.modules['selenium.webdriver'].ChromeOptions()  sys, selenium.webdriver
Call Method    ${chrome_options}    add_argument    test-type
Call Method    ${chrome_options}    add_argument    --disable-extensions
Call Method    ${chrome_options}    add_argument    --headless
Call Method    ${chrome_options}    add_argument    --disable-gpu
Call Method    ${chrome_options}    add_argument    --no-sandbox
Create Webdriver    Chrome    chrome_options=${chrome_options}

答案 7 :(得分:1)

我在linux环境中遇到此错误。如果不使用无头,那么您将需要

from sys import platform
    if platform != 'win32':
        from pyvirtualdisplay import Display
        display = Display(visible=0, size=(800, 600))
        display.start()

答案 8 :(得分:1)

确保chromedrivergoogle-chrome可执行文件都具有执行权限

sudo chmod -x "/usr/bin/chromedriver"

sudo chmod -x "/usr/bin/google-chrome"

答案 9 :(得分:1)

在过去六个月的测试运行中,此错误是随机发生的(Chrome 76和Chromedriver 76仍然发生),并且仅在Linux上发生。平均而言,每数百个测试中的一个就会失败,然后下一个测试就可以正常运行。

无法解决问题,在Python中,我将 namespace AutocancellationServiceTests { [TestClass] public class AutocancellationServiceTests { [TestMethod] public void DatabaseconnectionTest() { var commandMock = new Mock<IDbCommand>(); commandMock .Setup(m => m.ExecuteNonQuery()) .Verifiable(); var connectionMock = new Mock<IDbConnection>(); connectionMock .Setup(m => m.CreateCommand()) .Returns(commandMock.Object); var ConnectionMock = connectionMock.Object.State.ToString(); var connectionFactoryMock = new Mock<Servicecalls>(); connectionFactoryMock .Setup(m => m.DatabaseConnection()) .Returns(connectionMock.Object); var actual = connectionMock.Object; //Assert.AreEqual(expected, actual); } } } 包裹在我的所有测试所源自的测试用例类的setUp()中的try..except块中。如果遇到Webdriver异常,它将等待十秒钟,然后重试。

它解决了我遇到的问题;并不优雅,但是可以。

driver = webdriver.Chrome()

答案 10 :(得分:0)

我有同样的问题。我在带有“ sudo geany”的终端上运行它,您应该在没有“ sudo”的情况下运行它,只需在终端“ geany”上键入,这对我来说就解决了。

答案 11 :(得分:0)

希望这对某人有帮助。这在Ubuntu 18.10上对我有用

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument('--no-sandbox')
driver = webdriver.Chrome('/usr/lib/chromium-browser/chromedriver', options=chrome_options)
driver.get('http://www.google.com')
print('test')
driver.close()

答案 12 :(得分:0)

假设您已经下载了chromeDriver,则当已经打开多个chrome标签时,也会发生此错误。

如果关闭所有选项卡并再次运行,则错误应清除。

答案 13 :(得分:0)

我遇到了同样的问题,但是我将chromedriver移到了这条路 '/ opt / google / chrome /'

此代码正确运行

from selenium.webdriver import Chrome
driver = Chrome('/opt/google/chrome/chromedrive')
driver.get('https://google.com')

答案 14 :(得分:0)

这里每个机构提供的解决方案都有助于清除问题的表面,但是

要解决这个问题,您必须在非root用户上运行该应用程序 在 linux 上。

<块引用>

根据这篇文章

https://github.com/paralelo14/google_explorer/issues/2#issuecomment-246476321

答案 15 :(得分:0)

就我而言,chrome 坏了。以下两行解决了问题,

apt -y update; apt -y upgrade; apt -y dist-upgrade
apt --fix-broken install

答案 16 :(得分:0)

尝试使用 Pycharm 调试器在 WSL2 中运行/调试 Python Selenium 脚本时遇到此问题。 第一个解决方案是使用 --headless 模式,但我更喜欢在调试过程中使用 Chrome GUI。

在 Pycharm 调试器外部的系统终端中,Chrome GUI 以这种方式设置 DISPLAY 环境变量效果很好(遵循指南 here):

export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0

不幸的是,调试期间 ~/.bashrc 未在 Pycharm 中运行,导出不起作用。

我从 Pycharm 调试器获得 Chrome GUI 的方式:在 WSL2 中运行 echo $DISPLAY,将 ip(您有类似的东西)172.18.144.1:0 粘贴到 Pycharm 调试配置 > 环境变量中:

enter image description here