未知错误:Chrome无法启动:异常退出

Sah*_*heb 34 testing python-2.7 selenium-chromedriver

当我使用chromedriver使用selenium进行测试时,我收到此错误.

selenium.common.exceptions.WebDriverException: Message: u'unknown error: Chrome failed to start: exited abnormally\n  (Driver info: chromedriver=2.9.248316,platform=Linux 3.8.0-29-generic x86)'
Run Code Online (Sandbox Code Playgroud)

我确实下载了google-chrome stable和chromedriver,并使用此代码启动浏览器.

driver = webdriver.Chrome('/usr/local/bin/chromedriver')
Run Code Online (Sandbox Code Playgroud)

有人建议吗?谢谢.

Vic*_*cky 30

对于Linux:

启动显示之前启动浏览器.欲了解更多信息,请点击

from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 800))  
display.start()
driver = webdriver.Chrome()
Run Code Online (Sandbox Code Playgroud)

  • 嗨,你能解释为什么需要pyvirtualdisplay吗? (5认同)
  • 一个需要运行命令>>“ pip install pyvirtualdisplay”和>>“ sudo apt-get install xvfb” (2认同)

pjh*_*sea 26

为了帮助调试此问题,您可以使用selenium webdriver 的service_log_pathservice_args参数来查看chromedriver的输出:

service_log_path = "{}/chromedriver.log".format(outputdir)
service_args = ['--verbose']
driver = webdriver.Chrome('/path/to/chromedriver',
        service_args=service_args,
        service_log_path=service_log_path)
Run Code Online (Sandbox Code Playgroud)

我收到了同样的异常消息,并找到了两种方法来解决它; 我不确定OP的问题是否相同,但如果没有,chromedriver日志将有希望帮助.看着我的日志,我发现chromedriver(我尝试解决这个问题时尝试2.9降至2.6)决定以非常意外的方式运行哪个浏览器.在我的chromedriver所在的目录中,我有以下文件:

$ ls -l /path/to/
-rwx------  1 pjh grad_cs 5503600 Feb  3 00:07 chromedriver-2.9
drwxr-xr-x  3 pjh grad_cs    4096 Mar 28 15:51 chromium
Run Code Online (Sandbox Code Playgroud)

当我使用与OP相同的python代码调用chromedriver时:

driver = webdriver.Chrome('/path/to/chromedriver-2.9')
Run Code Online (Sandbox Code Playgroud)

这导致了异常消息.在chromedriver.log中我发现了这条消息:

[1.043][INFO]: Launching chrome: /path/to/chromium ...
Run Code Online (Sandbox Code Playgroud)

难以置信的!chromedriver正在尝试使用/path/to/chromium(这不是可执行文件,而是包含源代码的目录)作为要执行的浏览器!显然chromedriver尝试搜索当前目录以便在搜索我的浏览器之前运行PATH.因此,解决此问题的一个简单方法是检查chromedriver文件/目录所在的目录chrome,chromium并将它们移动到与其不同的目录chromedriver.

更好的解决方案是使用chrome_options参数明确告诉selenium/chromedriver执行哪个浏览器:

options = webdriver.ChromeOptions()
options.binary_location = '/opt/google/chrome/google-chrome'
service_log_path = "{}/chromedriver.log".format(outputdir)
service_args = ['--verbose']
driver = webdriver.Chrome('/path/to/chromedriver',
        chrome_options=options,
        service_args=service_args,
        service_log_path=service_log_path)
Run Code Online (Sandbox Code Playgroud)

chromedriver.log现在显示:

[0.999][INFO]: Launching chrome: /opt/google/chrome/google-chrome ...
Run Code Online (Sandbox Code Playgroud)

正如所料.

  • 谢啦.但我已经找到了办法.碰巧只需从`driver = webdriver.Chrome('/ usr/local/bin/chromedriver')`更改为`driver = webdriver.Chrome()`,我就可以运行我的代码了.我不知道为什么会这样,但它刚刚发生了!@pjhuw (4认同)
  • 另一个原因 - 我在没有 --no-sandbox 开关的情况下以 root 身份运行,而 chrome 不喜欢它。切换到另一个用户,瞧。 (2认同)

Siy*_*iyu 10

使用虚拟显示器的替代解决方案是无头模式.

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--window-size=1420,1080')
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=chrome_options)
Run Code Online (Sandbox Code Playgroud)


Guy*_*oft 8

如果使用Linux,请确保您没有以root用户身份运行.那是什么给了我错误.

  • 如果您正在使用CI工具,那么您可能在没有意识到(或控制它)的情况下以root身份运行.不幸的是,我不得不使用`--no-sandbox`来实现它. (2认同)
  • Wowwwwww,它对我有用,但有人知道原因吗? (2认同)

par*_*cer 5

有人已经提到过--no-sandbox选项,但要扩展它:确保这是您通过的第一个选项:

        System.setProperty("webdriver.chrome.driver",
                Paths.get("setups", driverFolder, driverFile).toAbsolutePath().toString());

        ChromeOptions options = new ChromeOptions();
        Map<String, Object> prefs = new HashMap<>();
        prefs.put("intl.accept_languages", "English");
        options.setExperimentalOption("prefs", prefs);

        options.addArguments("--no-sandbox");
        options.addArguments("--disable-features=VizDisplayCompositor");
        options.addArguments("--incognito");
        options.addArguments("enable-automation");
        options.addArguments("--headless");
        options.addArguments("--window-size=1920,1080");
        options.addArguments("--disable-gpu");
        options.addArguments("--disable-extensions");
        options.addArguments("--dns-prefetch-disable");
        options.setPageLoadStrategy(PageLoadStrategy.NORMAL);

        options.addArguments("enable-features=NetworkServiceInProcess");

        DesiredCapabilities capabilities = DesiredCapabilities.chrome();
        capabilities.setCapability("marionette", true);
        capabilities.setCapability(ChromeOptions.CAPABILITY, options);

        WebDriver driver = new ChromeDriver(capabilities);
        driver.manage().timeouts().implicitlyWait(15, SECONDS);
        driver.manage().timeouts().pageLoadTimeout(15, SECONDS);
Run Code Online (Sandbox Code Playgroud)

在其他选项之后添加时,出现错误。