我试图用一个URL启动chrome浏览器,浏览器启动后,它什么也不做。

1分钟后我看到如下错误:

Unable to open browser with url: 'https://www.google.com' (Root cause: org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist
  (Driver info: chromedriver=2.39.562718 (9a2698cba08cf5a471a29d30c8b3e12becabb0e9),platform=Windows NT 10.0.15063 x86_64) (WARNING: The server did not provide any stacktrace information)

我的配置:

Chrome浏览器:66 ChromeBrowser: 2.39.56

又及,在Firefox中一切都很好


当前回答

老问题,但类似的问题几乎把我逼疯了,所以分享我的解决方案。其他的建议都不能解决我的问题。

当我将Docker镜像Chrome从旧版本更新到Chrome 86时,我得到了这个错误。我的设置是不相同的,但我们实例化Chrome通过一个硒webdriver。

解决方案是将选项传递为goog:chromeOptions哈希而不是chromeOptions哈希。我真的不知道这是一个硒,Chrome, Chromedriver,或其他更新,但也许某些可怜的灵魂会在未来的这个答案中找到安慰。

其他回答

也有同样的问题。我正在谷歌云虚拟机上运行selenium脚本。

options.addArguments("--headless");

上面这句话解决了我的问题。我删除了其他可选参数。我认为其他答案中提到的其余代码行对解决云VM上的问题没有任何影响。

在我的例子中,当我试图使用我的默认用户配置文件时,它发生了:

...
options.addArguments("user-data-dir=D:\\MyHomeDirectory\\Google\\Chrome\\User Data");
...

这触发chrome重用已经在后台运行的进程,以这种方式,由chromedriver.exe启动的进程简单地结束。

解决方法:关闭所有在后台运行的chrome.exe进程。

在我的情况下,这是ubuntu服务器上的CI代理帐户的问题,我用自定义——user-data-dir解决了这个问题

chrome_options.add_argument(“——user-data-dir = ~ / config / google chrome”)

CI代理使用的我的帐户没有必要的权限,有趣的是一切都在根帐户上工作

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

chrome_options = Options()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--profile-directory=Default')
chrome_options.add_argument('--user-data-dir=~/.config/google-chrome')

driver = webdriver.Chrome(options=chrome_options)
url = 'https://www.google.com'
driver.get(url) 
get_url = driver.current_url 
print(get_url)

没有解决方法对我有效。但这里有一个变通办法:

maxcounter=5
for counter in range(maxcounter):
    try:           
        driver = webdriver.Chrome(chrome_options=options,
                          service_log_path=logfile,
                          service_args=["--verbose", "--log-path=%s" % logfile])
        break
    except WebDriverException as e:
        print("RETRYING INITIALIZATION OF WEBDRIVER! Error: %s" % str(e))
        time.sleep(10)
        if counter==maxcounter-1:
            raise WebDriverException("Maximum number of selenium-firefox-webdriver-retries exceeded.")

有很多可能的原因导致RESPONSE InitSession ERROR unknown ERROR: DevToolsActivePort文件不存在错误消息(正如我们可以从这个问题的答案数量中看到的)。因此,让我们更深入地解释这个错误消息的确切含义。

根据chromedriver源代码,消息是在ParseDevToolsActivePortFile方法中创建的。此方法在启动chrome进程后从循环中调用。

在循环中,驱动程序检查chrome进程是否仍在运行,如果ParseDevToolsActivePortFile文件已经由chrome创建。这个循环有一个硬编码的60s超时。

我认为这条信息可能有两个原因:

Chrome在启动过程中非常慢——例如由于缺乏系统资源——主要是CPU或内存。在这种情况下,它可以发生,有时铬管理开始在时间限制,有时不是。 还有一个问题,防止chrome启动-缺失或破碎的依赖,错误的配置等。在这种情况下,这个错误消息并没有真正的帮助,您应该找到另一个日志消息来解释失败的真正原因。