WebDriverException:未知错误:尝试启动 Chrome 浏览器时 DevToolsActivePort 文件不存在

WebDriverException: unknown error: DevToolsActivePort file doesn't exist while trying to initiate Chrome Browser

提问人:Kumar Sampath 提问时间:6/1/2018 最后编辑:frianHKumar Sampath 更新时间:10/1/2023 访问量:571525

问:

我正在尝试使用 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)

我的配置:

  • 铬 : 66
  • Chrome浏览器 : 2.39.56

P.S 在 Firefox 中一切正常

Google-Chrome 硒网络 web驱动程序 驱动程序

评论

0赞 xtian 8/21/2018
当 vncserver 崩溃并且我不再有 X 显示时,我收到了此错误
0赞 bers 3/21/2022
有关在没有 X 显示器的情况下运行的修复,请使用 ,请参阅 stackoverflow.com/questions/50790733/...export DISPLAY=:0

答:

222赞 undetected Selenium 6/1/2018 #1

经验法则

Chrome 在启动过程中崩溃的一个常见原因是在 Linux 上以 root 用户(管理员)身份运行 Chrome。虽然可以通过在创建 WebDriver 会话时传递 --no-sandbox 标志来解决此问题,但不支持此类配置,并且强烈建议不要这样做。您需要将环境配置为以普通用户身份运行 Chrome。


此错误消息...

org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist 

...意味着 ChromeDriver 无法启动/生成新的 WebBrowser,即 Chrome 浏览器会话。

您的代码试验和所有二进制文件的版本控制信息会给我们一些关于出了什么问题的提示。

但是,根据将 --disable-dev-shm-usage 添加到默认启动标志似乎添加参数 --disable-dev-shm-usage 将暂时解决问题。

如果您希望启动/跨一个新的 Chrome 浏览器会话,可以使用以下解决方案:

System.setProperty("webdriver.chrome.driver", "C:\\path\\to\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized"); // open Browser in maximized mode
options.addArguments("disable-infobars"); // disabling infobars
options.addArguments("--disable-extensions"); // disabling extensions
options.addArguments("--disable-gpu"); // applicable to windows os only
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("--no-sandbox"); // Bypass OS security model
WebDriver driver = new ChromeDriver(options);
driver.get("https://google.com");

禁用开发 SHM 用法

根据 base_switches.cc,disable-dev-shm-usage 似乎仅在 Linux 操作系统上有效:

#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
// The /dev/shm partition is too small in certain VM environments, causing
// Chrome to fail or crash (see http://crbug.com/715363). Use this flag to
// work-around this issue (a temporary directory will always be used to create
// anonymous shared memory files).
const char kDisableDevShmUsage[] = "disable-dev-shm-usage";
#endif

在讨论中,添加一个选项以使用 /tmp 而不是 /dev/shm David 提到:

我认为这取决于 /dev/shm 和 /tmp 的挂载方式。 如果它们都作为 tmpfs 挂载,我假设不会有任何区别。 如果由于某种原因 /tmp 没有映射为 tmpfs(我认为 systemd 默认映射为 tmpfs),chrome 共享内存管理在创建匿名共享文件时始终将文件映射到内存中,因此即使在这种情况下也应该没有太大区别。我想你可以在启用标志的情况下强制进行遥测测试,看看它是如何进行的。

至于为什么不默认使用,这是共享内存团队的推回,我想默认情况下应该使用 /dev/shm 作为共享内存是有道理的。

最终,所有这些都应该转向使用memfd_create,但我认为这不会很快发生,因为它需要大量重构 Chrome 内存管理。


参考

您可以在以下位置找到一些详细的讨论:


尾声

这是 Sandbox 故事的链接。

评论

48赞 6/7/2018
但是是什么导致了这个特定的错误,为什么它突然开始弹出?DevToolsActivePort file doesn't exist
3赞 Peter Kelley 6/12/2018
“附加注意事项”项目 - 它们看起来非常适用于此问题。尤其是这种情况,还没有确定导致问题的确切原因。
7赞 expz 11/30/2018
从@DebanjanB帖子的删除部分来看,这可能是由于使用不支持已安装Chrome版本的Chrome驱动程序引起的。例如,如果在不升级 Chromedriver 的情况下升级了 chrome,则可能会发生这种情况。
10赞 George Pantazes 8/9/2019
如果这对其他人有帮助,仅仅添加是不够的。我还必须添加才能让它工作。这是我对 Selenium-java 的完整修复:disable-dev-shm-usage--no-sandboxchromeOptions.addArguments("--no-sandbox", "--disable-dev-shm-usage");
7赞 ARA1307 10/7/2019
如果上述选项都没有帮助(就像我的情况一样) - 只需从命令行运行:,您就会看到实际问题(在我的情况下,这是一些库不兼容)。如果您的 chrome 设置一切正常,它应该延迟几秒钟,然后返回如下内容:chrome --headless[1006/110844.401199:ERROR:browser_process_sub_thread.cc(203)] Waited 3 ms for network service
99赞 Peter Kelley 6/7/2018 #2

我在 2018 年 6 月 4 日星期一开始看到这个问题。我们的测试每个工作日都会进行。似乎唯一改变的是 google-chrome 版本(已更新到当前版本)JVM 和 Selenium 是 Linux 盒子上的最新版本(Java 1.8.0_151、selenium 3.12.0、google-chrome 67.0.3396.62 和 xvfb-run)。
特别是添加参数“--no-sandbox”和“--disable-dev-shm-usage”阻止了错误。 我将研究这些问题以查找有关效果的更多信息,以及其他问题,例如触发 google-chrome 更新的原因。

ChromeOptions options = new ChromeOptions();
        ...
        options.addArguments("--no-sandbox");
        options.addArguments("--disable-dev-shm-usage");

评论

0赞 Peter Kelley 6/7/2018
我想澄清一下,这段代码每个工作日在 Ubuntu Linux 机器上运行,但即使在周一,Windows 桌面上的等效代码也能正常运行。我没有找到有关DevToolsActivePort文件功能的信息,这也很有用。PK的
1赞 Mario Pérez Alarcón 6/9/2018
这些选项也为我停止了错误。pd:使用 Rails 堆栈。
0赞 Jonathan 9/14/2018
即使这样,我仍然会遇到错误[java] [1536892035.965][SEVERE]: Timed out receiving message from renderer: 60.000
0赞 Peter Kelley 9/17/2018
@Jonathan - 嗨!您能否提供更多详细信息,例如您正在使用的操作系统、您使用的组件版本或您如何调用该过程?
0赞 Peter Kelley 1/16/2019
@Toby : 嗨!我并不是要暗示这个位置有所作为,只是尽量减少这些参数的使用。似乎我所依赖的一些默认值在升级发生时发生了变化。您提供的系统或消息的任何其他详细信息可能会有所帮助。
24赞 Kumar Sampath 6/8/2018 #3

更新:

我能够解决这个问题,现在我能够使用所需的 url 访问 chrome。

尝试所提供解决方案的结果:

我尝试了上面提供的所有设置,但无法解决问题

关于该问题的解释:

根据我的观察,DevToolsActivePort 文件不存在是当 chrome 无法在scoped_dirXXXXX文件夹中找到其引用时引起的。

为解决该问题而采取的步骤

  1. 我已经杀死了所有的 chrome 进程和 chrome 驱动程序进程。
  2. 添加了以下代码来调用 chrome

    System.setProperty("webdriver.chrome.driver","pathto\\chromedriver.exe");    
    ChromeOptions options = new ChromeOptions();
    options.setExperimentalOption("useAutomationExtension", false);
    WebDriver driver = new ChromeDriver(options);
    driver.get(url);
    

使用上述步骤,我能够解决问题。

感谢您的回答。

评论

5赞 Toby 1/9/2019
你知道useAutomationExtension有什么影响吗?它禁用了自动化扩展(屏幕截图/控制等)不是吗?DevTools 的出现难道不应该使这种变化没有影响吗?codereview.chromium.org/2785413002
61赞 Vinodh Periyasamy 6/13/2018 #4

我在python中遇到了同样的问题。以上有帮助。这是我在 python 中使用的 -

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('/path/to/your_chrome_driver_dir/chromedriver',chrome_options=chrome_options)

评论

0赞 axel_ande 9/3/2018
我解决了升级 chrome 的问题(我已经拥有最新的 chromedrive),因此我也必须升级通常的浏览器。
0赞 jarh1992 2/22/2022
非常感谢,这对谷歌合作也很有帮助
0赞 Ahmed Akhtar 5/20/2023
完美的解决方案。
3赞 Sergiy Konoplyaniy 7/13/2018 #5

我遇到了同样的问题,但在我的情况下,chrome 之前安装在用户临时文件夹中,之后重新安装到 Program 文件中。所以这里提供的任何解决方案都对我没有帮助。但是,如果提供chrome.exe的路径,则所有工作:

chromeOptions.setBinary("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");

我希望这对某人有所帮助=)

评论

0赞 Toby 1/9/2019
似乎与下面的@shiuu修复完全相反
83赞 Sreejith Edayillam 7/25/2018 #6

我们在 Jenkins(Linux 机器)上遇到了同样的问题,并尝试了上述所有选项。

唯一有帮助的是设定论点:--headless

chrome_options.add_argument('--headless')

当我们进一步调查时,我们注意到 XVFB 屏幕没有启动属性,这导致了此错误。修复 XVFB 屏幕后,问题得到了解决。

评论

4赞 ozz 12/3/2018
这解决了我的问题,当使用 C# 运行时(在这种情况下,选项如下所示:选项。AddArgument(“--无头”);
0赞 lucaswxp 7/23/2020
XVFB 对我来说是问题
8赞 Tyler Gallenbeck 9/26/2020
XVFB有什么问题。你能解释一下吗?
1赞 dnwjn 3/7/2021
这绝对解决了我的问题!我试图在 Ubuntu 3.9 无头上运行 selenium 和 chromedriver 的 python20.04 项目,但我一直收到 OP 的错误。有了你的加入,我让它开始工作了!谢谢!
0赞 Criminally Inane 11/18/2021
就是这样 - 谢谢!Xvfb 尚未在服务器上启动。一旦我启动它,一切都运行得毫无问题。希望原始错误消息至少对追踪此问题更有帮助。
1赞 Alex 10/30/2018 #7

没有适合我的解决方案。但这里有一个解决方法:

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.")
2赞 radzimir 11/15/2018 #8

就我而言,当我尝试使用我的默认用户配置文件时,它发生了:

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

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

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

评论

0赞 jeremycg 12/28/2018
我遇到了类似的问题,但在 linux 中 - 脚本崩溃后我的 chrome 进程没有正确退出,并且它们被错误地重用。杀死他们解决了这个问题
0赞 12/13/2022
这也是我的确切问题。我想使用我的默认配置文件。在杀死我已经运行的所有其他 chrome 实例后,它运行良好。
2赞 parvez basha 11/19/2018 #9

就我而言,我试图使用 chrome 浏览器在 Windows 操作系统上创建一个可运行的 jar,并希望在带有 CentOs 的 unix box 中以无头模式运行相同的 jar。我将我的二进制文件指向一个驱动程序,该驱动程序已下载并与我的套件打包在一起。对我来说,无论添加以下内容,这个问题都会继续发生:

ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("--no-sandbox");
System.setProperty("webdriver.chrome.args", "--disable-logging");
System.setProperty("webdriver.chrome.silentOutput", "true");
options.setBinary("/pointing/downloaded/driver/path/in/automationsuite");
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("disable-infobars"); // disabling infobars
options.addArguments("--disable-extensions"); // disabling extensions
options.addArguments("--disable-gpu"); // applicable to windows os only
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("window-size=1024,768"); // Bypass OS security model
options.addArguments("--log-level=3"); // set log level
options.addArguments("--silent");//
options.setCapability("chrome.verbose", false); //disable logging
driver = new ChromeDriver(options);

我尝试过并为我工作的解决方案是,在主机 VM/Unix 盒子上下载 chrome 及其工具,在自动化套件和宾果游戏中安装并将二进制文件指向此!它的工作原理:)

下载命令:

wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm

安装命令:

sudo yum install -y ./google-chrome-stable_current_*.rpm

使用以下 google-chrome 二进制路径更新套件:

options.setBinary("/opt/google/chrome/google-chrome");

和。。它有效!

评论

0赞 pabrams 7/10/2019
我们在哪里添加此代码?我在 .side 文件中没有看到 C# 代码
1赞 shiuu 12/4/2018 #10

此错误似乎有很多可能的原因。在我们的例子中,发生错误是因为我们在代码中有以下两行:

System.setProperty("webdriver.chrome.driver", chromeDriverPath);
chromeOptions.setBinary(chromeDriverPath);

通过删除第二行来解决。

评论

0赞 Toby 1/9/2019
似乎与上面的 @sergiy-konoplyaniy 修复完全相反:'(
0赞 shiuu 1/10/2019
在我们的 setBinary 中,我们尝试设置 chrome 驱动程序,这似乎是一个错误。@sergiy-konoplyaniy 的修复通过 setBinary 设置了 chrome.exe。
0赞 pabrams 7/10/2019
你从哪里得到这个代码?我所拥有的只是一个 .side 文件,它没有 C# 代码。
1赞 Frankie Drake 6/4/2021
哈哈哈哈,这为我解决了问题,但没有删除这一行并添加它!谢谢)似乎驱动程序无法使用默认路径找到我的可执行文件。但为什么id不这么说,显示奇怪的信息......
2赞 Osanda Deshan 1/10/2019 #11

我在与 jenkins 服务器集成时也遇到了这个问题,我使用了 root 用户进行 jenkin 作业,当我将用户更改为其他用户时,该问题已修复。我不确定为什么root用户会出现此错误。

  • Google Chrome 版本 71.0
  • ChromeDriver 的 2.45版
  • CentOS7 版本 1.153

评论

0赞 7/1/2020
非root用户为我工作,我有chromium的正确chrome驱动程序版本。
3赞 user2694064 1/20/2019 #12

将 conf.js 中的功能更新为

exports.config = {
  seleniumAddress: 'http://localhost:4444/wd/hub',
  specs: ['todo-spec.js'],
  capabilities: {
    browserName: 'chrome',
    chromeOptions: {
      args: ['--disable-gpu', '--no-sandbox', '--disable-extensions', '--disable-dev-shm-usage']
    }
  },

};
33赞 Nital 2/12/2019 #13

我最近遇到了同样的问题,经过一些反复试验,它也对我有用。

必须位于顶部:

options.addArguments("--no-sandbox"); //has to be the very first option

BaseSelenium测试.java

public abstract class BaseSeleniumTests {

    private static final String CHROMEDRIVER_EXE = "chromedriver.exe";
    private static final String IEDRIVER_EXE = "IEDriverServer.exe";
    private static final String FFDRIVER_EXE = "geckodriver.exe";
    protected WebDriver driver;

    @Before
    public void setUp() {
        loadChromeDriver();
    }

    @After
    public void tearDown() {
        if (driver != null) {
            driver.close();
            driver.quit();
        }
    }

    private void loadChromeDriver() {
        ClassLoader classLoader = getClass().getClassLoader();
        String filePath = classLoader.getResource(CHROMEDRIVER_EXE).getFile();
        DesiredCapabilities capabilities = DesiredCapabilities.chrome();
        ChromeDriverService service = new ChromeDriverService.Builder()
                .usingDriverExecutable(new File(filePath))
                .build();
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--no-sandbox"); // Bypass OS security model, MUST BE THE VERY FIRST OPTION
        options.addArguments("--headless");
        options.setExperimentalOption("useAutomationExtension", false);
        options.addArguments("start-maximized"); // open Browser in maximized mode
        options.addArguments("disable-infobars"); // disabling infobars
        options.addArguments("--disable-extensions"); // disabling extensions
        options.addArguments("--disable-gpu"); // applicable to windows os only
        options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
        options.merge(capabilities);
        this.driver = new ChromeDriver(service, options);
    }

}

GoogleSearchPageTraditionalSeleniumTests.java

@RunWith(SpringRunner.class)
@SpringBootTest
public class GoogleSearchPageTraditionalSeleniumTests extends BaseSeleniumTests {

    @Test
    public void getSearchPage() {
        this.driver.get("https://www.google.com");
        WebElement element = this.driver.findElement(By.name("q"));
        assertNotNull(element);
    }

}

pom.xml

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <scope>test</scope>
        </dependency>
</dependencies>

评论

0赞 Nital 7/11/2019
有趣!你如何生成一个 .side 文件?这是QA人员手动完成的事情吗?
0赞 pabrams 7/11/2019
您可以使用 Selenium IDE 来记录测试。结果是一个 .side 文件。它使用 IDE 运行良好,但我正在尝试使用 selenium-side-runner 运行它,但在使用 chromedriver 时遇到了各种问题。
6赞 Jacob Brazeal 4/20/2020
必须是第一选择——花几天时间找到这个哈哈
8赞 Piercarlo Slavazza 8/8/2019 #14

另一个答案所述:

此错误消息...意味着 ChromeDriver 无法启动/生成新的 WebBrowser,即 Chrome 浏览器会话。

在可能的原因中,我想提一下这样一个事实,即如果您通过 Xvfb 运行无头 Chromium,您可能需要变量:就我而言,我已经准备好(按照建议)和 选项,一切都运行良好,但是在运行最新(撰写本文时)Ubuntu 18.04 的新安装中,此错误开始发生, 唯一可能的修复是执行一个(之前用 )。exportDISPLAY--disable-dev-shm-usage--no-sandboxexport DISPLAY=":20"Xvfb :20&

评论

0赞 Ryan Shillington 8/15/2019
天哪,谢谢。我正在对我们的 docker 容器进行一些更改,我不小心遗漏了 xvfb。如果你没有把这个留在这里,我永远不会找到这个:-)。
0赞 Trook2007 5/10/2021
使用 xvfb-run 也是一种选择。
0赞 klapshin 5/30/2021
这几乎完全适合我,请在此处查看我的答案 stackoverflow.com/a/67747781/6875391
6赞 Chris Moschini 11/3/2019 #15

您可能只是因为将错误的参数传递给 Chrome 而收到此错误。例如,如果我将 arg 作为参数传递给 C# ChromeDriver,它会很好地启动。如果我犯了一个错误并使用了错误的语法,我就会得到错误。"headless""--headless"DevToolsActivePort file doesn't exist

评论

0赞 Scout721 10/13/2021
谢谢!这是我一直在寻找的错误,它不是headless--headless
11赞 radzimir 11/7/2019 #16

当 chromedriver 无法确定 chrome 正在使用的调试端口时,就会发生这种情况。

一个可能的原因是 HKEY_CURRENT_USER\Software\Policies\Google\Chrome\UserDataDir 存在开放缺陷

但在我的最后一个案例中,这是其他一些不明原因。

幸运的是,手动设置端口号有效:

final String[] args = { "--remote-debugging-port=9222" };
options.addArguments(args);
WebDriver driver = new ChromeDriver(options);

评论

4赞 Mike Shiyan 2/17/2020
它是一个恒定的端口吗?或者我在哪里可以找到它?
37赞 Soheil Pourbafrani 2/11/2020 #17

就我而言,在以下环境中:

  • 视窗 10
  • 3.7.5
  • 路径中的 Google Chrome 版本 80 和相应的 ChromeDriverC:\Windows
  • 3.141.0

我需要将参数和添加到对象中,并通过以管理员身份使用 Powershell/cmd 作为管理员用户运行代码。--no-sandbox--remote-debugging-port=9222ChromeOptions

下面是相关的代码段:

options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('--disable-infobars')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--no-sandbox')
options.add_argument('--remote-debugging-port=9222')
driver = webdriver.Chrome(options=options)

评论

1赞 patroqueeet 2/17/2020
对于我来说,使用 Ubuntu 18.04、py3.7、chrome(驱动程序)80 的 docker 也是如此
0赞 Ryan Harris 3/27/2020
这对我有用,没有进一步的问题。我今天刚开始遇到这个问题,但由于您的回答,它很快就解决了!我的环境与你的环境基本相同。
0赞 Codev 8/31/2020
在 ubuntu 18 和 jenkins 上,它就是这样工作的。就我而言,“无头”论点作为重要论点缺失了。
1赞 Scott P. 12/4/2020
remote-debugging-port=9222 之后 no-sandbox 和 disable-dev-shm-usage 在 Fedora 33 上对我有用
0赞 horaceT 12/29/2020
对我有用。Python 3.7.3、Ubuntu 20.04、Chrome 87.0.4280
1赞 Adrian Jimenez 3/29/2020 #18

我遇到了同样的问题,我正在使用 UBUNTU、PYTHON 和 OPERA 浏览器。就我而言,问题源于我的 Operadriver 版本过时。

溶液: 1.确保安装最新的opera浏览器版本(不要使用opera beta或opera developer),为此,请访问Opera官方网站并从那里下载最新的opera_stable版本。

  1. 安装最新的 opera 驱动程序(如果您已经安装了 opera 驱动程序,则必须先使用 sudo rm 将其删除......

wget https://github.com/operasoftware/operachromiumdriver/releases/download/v.80.0.3987.100/operadriver_linux64.zip

   unzip operadriver_linux64.zip
   sudo mv operadriver /usr/bin/operadriver
   sudo chown root:root /usr/bin/operadriver
   sudo chmod +x /usr/bin/operadriver

就我而言,最新的是 80.0.3987,如您所见

  1. 此外,我还安装了 chromedriver(但由于我在测试之前已经这样做了,我不知道这是需要的)为了安装 chromedriver,请按照上一步中的步骤操作:v

  2. 享受并感谢我!

示例硒代码

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Opera()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.quit()
32赞 Lelouch 5/24/2020 #19

在首先单独下载 chromedriver 然后使用 Ubuntu 20 之后,我使用 Python Selenium 在 Ubuntu 上遇到了这个问题,即使它们是相同的版本,这种情况也会不断发生。sudo apt install chromium-browser

我的解决方法是使用提供的 chrome 驱动程序,该驱动程序随 repo 包一起提供,位于

/snap/bin/chromium.chrome驱动程序

driver = webdriver.Chrome(chrome_options=options, executable_path='/snap/bin/chromium.chromedriver')

评论

1赞 hatze 5/14/2021
非常感谢。这对我有帮助: 眼镜: Ubuntu 20.04, python 3.8 与基于 snap 的 Chromium 安装。
1赞 Daniel Nelson 2/16/2022
正如您所发现的,在 Ubuntu 上工作时,似乎 Chromium 浏览器还安装了兼容的 chrome 驱动程序,该驱动程序将始终干扰从 chromedriver.chromium.org/downloads 下载的驱动程序。预安装驱动程序的默认位置位于:/snap/bin/chromium.chromedriver 在下面的帖子中搜索 snap 以获取更多信息。pythonfixing.com/2021/10/......让它工作的建议是:不要自己下载驱动程序。使用 snap/bin 中的那个。否则,您将始终收到此错误!
0赞 Digestible1010101 4/28/2022
很有帮助!我想知道这是否标志着将 chromedriver 更新到正确的 chrome 版本的无休止战斗的结束?我假设快照会自动更新。知道 chrome 驱动程序是否随之更新吗?
0赞 Sean Burlington 7/17/2023
在 Nightwatchjs 中,编辑配置文件中的服务器路径,如下所示 nightwatchjs.org/guide/configuration/...
2赞 Codev 8/31/2020 #20

我使用在 Ubuntu 18 LTS linux 上运行的 Jenkins 运行 selenium 测试。我遇到了这个错误,直到我添加了这样的参数“headless”(以及其他一些参数):

ChromeOptions options = new ChromeOptions();
options.addArguments("headless"); // headless -> no browser window. needed for jenkins
options.addArguments("disable-infobars"); // disabling infobars
options.addArguments("--disable-extensions"); // disabling extensions
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("--no-sandbox"); // Bypass OS security model
ChromeDriver driver = new ChromeDriver(options);

driver.get("www.google.com");
3赞 Tejas Saini 9/30/2020 #21

有同样的问题。我正在 Google 云 VM 上运行 selenium 脚本。

options.addArguments("--headless");

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

5赞 Eric Dauenhauer 10/14/2020 #22

老问题,但类似的问题几乎让我精神错乱,所以分享我的解决方案。其他建议都没有解决我的问题。

当我将 Docker 映像 Chrome 安装从旧版本更新到 Chrome 86 时,出现此错误。我的设置不相同,但我们是通过 selenium 网络驱动程序实例化 Chrome。

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

评论

0赞 CPak 11/16/2020
你能描述一下你是如何多用一点的吗?现在我正在使用goog:chromeOptionschrome_options = webdriver.ChromeOptions()chrome_options.add_argument(...)
0赞 Eric Dauenhauer 11/18/2020
不幸的是,我最近离开了实现此@CPak的公司,因此我面前没有代码示例。我正在使用 Ruby 驱动程序,我相信它只是一个传递给 ChromeOptions() 的哈希值。类似 .很抱歉,我没有语法的确切片段。chrome_options = webdriver.ChromeOptions({"goog:chromeOptions": { args: ["headless"] })
4赞 natalka 2/14/2021 #23

对于 Ubuntu 20,它确实帮助我使用我的系统 chromium 驱动程序而不是下载的驱动程序:

# chromium which
/snap/bin/chromium

driver = webdriver.Chrome('/snap/bin/chromium.chromedriver',
                          options=chrome_options)

对于下载的 webdriver,它看起来需要设置远程调试端口 --remote-debugging-port=9222,如其中一个答案(由 Soheil Pourbafrani 提供):

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--remote-debugging-port=9222")
driver = webdriver.Chrome('<path_to>/chromedriver', options=chrome_options)
20赞 rafalkasa 2/18/2021 #24

就我而言,ubuntu 服务器上的 CI 代理帐户有问题,我使用自定义 --user-data-dir 解决了这个问题

chrome_options.add_argument('--user-data-dir=~/.config/google-chrome')

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

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)

评论

0赞 bhattraideb 4/22/2021
我收到此错误 有人得到了这个问题的解决方案吗?selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH.
0赞 Caleb Jay 8/18/2021
此选项对我有用,但前提是我添加了上述所有参数。缺少一个,任何一个,都会导致我得到同样的错误。我在 docker 映像中使用了 selenium。FROM python:3.8-slim-buster
0赞 Paul Collingwood 2/14/2022
当在没有 root 的 docker 映像中使用自定义用户时,这也有效
2赞 huang botao 3/24/2021 #25

就我而言,当我更改 AND 版本时,错误已修复:)google-chromechromedriver

#google-chrome version
[root@localhost ~]# /usr/bin/google-chrome --version
Google Chrome 83.0.4103.106 

#chromedriver version
[root@localhost ~]# /usr/local/bin/chromedriver -v
ChromeDriver 83.0.4103.14 (be04594a2b8411758b860104bc0a1033417178be-refs/branch-heads/4103@{#119})

PS:硒版本是3.9.1

14赞 eNca 8/25/2021 #26

错误消息有很多可能的原因(从这个问题的答案数量可以看出)。因此,让我们更深入地解释此错误消息的确切含义。RESPONSE InitSession ERROR unknown error: DevToolsActivePort file doesn't exist

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

在循环中,驱动程序检查 chrome 进程是否仍在运行,以及文件是否已由 chrome 创建。此循环存在硬编码的 60 秒超时ParseDevToolsActivePortFile

我看到此消息有两个可能的原因:

  • Chrome 在启动过程中真的很慢 - 例如由于缺乏系统资源 - 主要是 CPU 或内存。在这种情况下,有时可能会发生 chrome 设法在时间限制内启动,有时则不然。
  • 还有另一个问题阻止 chrome 启动 - 缺少或损坏的依赖项、错误的配置等。在这种情况下,此错误消息并不真正有用,您应该找到另一条日志消息来解释失败的真正原因。
4赞 Jortega 9/17/2021 #27

日期: 2021/9/16

一切正常,在 docker 托管的 ubuntu 容器中使用 python 在本地运行带有 selenium 的 chrome。尝试从 Jenkins 运行时,返回上述错误WebDriverException: unknown error: DevToolsActivePort

环境:

-Ubuntu21.04 在具有 RDP 访问权限的 docker 容器内。

-Chrome 版 - Chrome 驱动程序:93

溶液:在启动浏览器的 python 文件中,我必须使用以下行设置环境变量:DISPLAY

import os

os.environ['DISPLAY'] = ':10.0'
#DISPLAY_VAR = os.environ.get('DISPLAY')
#print("DISPLAY_VAR:", DISPLAY_VAR)
8赞 PlumsAhoy 5/18/2022 #28

我被困在这个问题上很长一段时间,最后通过添加一个附加选项来修复它:

options.addArguments("--crash-dumps-dir=/tmp")

评论

0赞 jis0324 6/1/2022
嘿。@PlumsAhoy。希望你一切顺利。我整天都遇到这个问题,整天都在努力寻找正确的解决方案......我遵循了所有投赞成票的答案,但它们不适合我。刚刚在 24 小时内找到了您的答案,这解决了我的问题......谢谢你的回答...
3赞 Jameu Lukasli1 7/20/2022
对于 selenium 版本 4.x+,您应该将此行更改为: .作为 V4。X+ 已更改为chrome_options.add_argument("--crash-dumps-dir=/tmp")addArguments()add_argument()
1赞 yong 9/2/2022 #29

我遇到了同样的问题,就我而言,Linux系统中有两个不同的常见用户userAuserBuserA 首先运行 selinium 程序,该程序使用 ChromeDriver 成功启动 chrome browswer,当涉及到用户 B 时,会发生错误。DevToolsActivePort file doesn't exist

我尝试了该选项,但它导致了一个新的异常:--remote-debugging-port=9222selenium.common.exceptions.WebDriverException: Message: chrome not reachable

我运行了google-chome目录,并看到以下错误:
mkdir /tmp/Crashpad/new: Permission denied (13)

我搜索了这个问题,得到了这个:
https://johncylee.github.io/2022/05/14/chrome-headless-%E6%A8%A1%E5%BC%8F%E4%B8%8B-devtoolsactiveport-file-doesn-t-exist-%E5%95%8F%E9%A1%8C/

chrome_options.add_argument(f"--crash-dumps-dir={os.path.expanduser('~/tmp/Crashpad')}")

感谢@johncylee。

评论

0赞 Walter Gillett 6/3/2023
我发现了同样的问题,并通过使 /tmp/Crashpad 全局可写(在共享工作站上)来修复它,但这是一个更好的主意。
10赞 SaturnFromTitan 9/4/2022 #30

我知道这是一个老问题,它已经有很多答案了。但是,我遇到了这个问题,碰到了这个线程,提出的解决方案都没有帮助。花了几天时间(!),我终于找到了一个解决方案:

我的问题是我在配备 M1 芯片的 MacBook 上使用硒/独立镀铬映像。在切换到 seleniarm/standalone-chromium 后,一切终于开始工作了。