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

时间:2014-03-15 13:57:42

标签: python-2.7 testing 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)'

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

driver = webdriver.Chrome('/usr/local/bin/chromedriver')

有人建议吗?感谢。

10 个答案:

答案 0 :(得分:29)

对于Linux:

启动Chrome之前启动显示。有关详情,请点击here

from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 800))  
display.start()
driver = webdriver.Chrome()

答案 1 :(得分:25)

为了帮助调试此问题,您可以使用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)

我收到了同样的异常消息,并找到了两种方法来解决它;我不确定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

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

driver = webdriver.Chrome('/path/to/chromedriver-2.9')

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

[1.043][INFO]: Launching chrome: /path/to/chromium ...

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

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

chromedriver

chromedriver.log现在显示:

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)

正如所料。

答案 2 :(得分:8)

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

答案 3 :(得分:6)

使用虚拟显示器的另一种解决方案是无头模式。

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)

答案 4 :(得分:1)

我遇到了同样的问题并通过在以下位置安装Chrome来修复它:

C:\Users\..\AppData\Local\Google\Chrome\Application

您可以通过运行Chrome设置并在用户帐户控制提示时拒绝来执行此操作。

答案 5 :(得分:1)

通过确保您的chromedriver版本与已安装的Chrome版本正确(您可以选中here),可以解决此问题。您还需要按照Delete Chromedriver from Ubuntu

中的说明,在安装新版本的chromedriver之前先将其删除。

答案 6 :(得分:0)

此问题已通过以下步骤解决

1)安装Xvfb Centos 7:百胜安装chromedriver chrome xorg-x11-server-Xvfb

2)更新Chrome驱动程序 Centos 7:wget https://chromedriver.storage.googleapis.com/2.40/chromedriver_linux64.zip

答案 7 :(得分:0)

Centos 7上使用scrapy +硒+ chrome驱动程序抓取某些内容时,我遇到了相同的错误,并且使用url的方法解决了我的问题。

yum install mesa-libOSMesa-devel gnu-free-sans-fonts

引用:https://bugs.chromium.org/p/chromium/issues/detail?id=695212

答案 8 :(得分:0)

Selenium Webdriver的另一种解决方案是X虚拟帧缓冲区:

with Xvfb() as _:
    timeout_request = ConfigTargetsManager.target_global_configs.get('timeout_request', 10)
    driver = webdriver.Chrome(executable_path=ConfigTargetsManager.target_global_configs.get('chrome_browser_path',
                                                                                             '/usr/lib/chromium-browser/chromedriver'))
    driver.get(url)

答案 9 :(得分:0)

已经有人提到过--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);

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