3

在 chrome 浏览器上自动化的 selenium 代码。

chrome 版本:79.0.3945.117(本地和服务器机器相同)

chrome 驱动程序:在 chrome 版本驱动程序之前尝试了所有最新及以下版本。

执行状态 - 在本地机器上: 在无头和 gui 中工作正常。

执行状态 - 在服务器 Centros 7 机器上。 在无头中工作正常。在 GUI 中给出错误:

options.addArguments("--no-sandbox"); // Bypass OS security model
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems

错误日志

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
>>>>> Initializing the webdriver: CHROME on OS: linux64
Jan 11, 2020 12:27:52 PM org.openqa.selenium.remote.DesiredCapabilities chrome
INFO: Using `new ChromeOptions()` is preferred to `DesiredCapabilities.chrome()`
Starting ChromeDriver 79.0.3945.36 (3582db32b33893869b8c1339e8f4d9ed1816f143-refs/branch-heads/3945@{#614}) on port 16949
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
>>>>> Initializing the webdriver: CHROME on OS: linux64
unknown error: Chrome failed to start: exited abnormally
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'qa9', ip: '', os.name: 'Linux', os.arch: 'amd64', os.version: '3.10.0-1062.9.1.el7.x86_64', java.version: '1.8.0_232'
Driver info: driver.version: ChromeDriver
remote stacktrace: #0 0x564eeb93d479 <unknown>

Jan 11, 2020 12:27:52 PM org.openqa.selenium.remote.DesiredCapabilities chrome
INFO: Using `new ChromeOptions()` is preferred to `DesiredCapabilities.chrome()`
null
2020-01-11 12:27:52 INFO  BaseClass:23 - Test Completed

分析

1- Chrome 在服务器机器上打开正常。

2-google-chrome --no-sandbox在服务器机器上使用启动 chrome

3- google-chrome 位于 /usr/bin/google-chrome 位置

因此尝试了其他答案中可用的所有步骤并使用各种 chrome 选项,但仍然无法在 chrome gui 上运行 selenium。

options.addArguments("--no-sandbox"); // Bypass OS security model
options.setBinary("/usr/bin/google-chrome");
options.addArguments("start-maximized"); // open Browser in maximized mode
options.addArguments("disable-infobars"); // disabling infobars
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("--test-type");
options.addArguments("--window-size=1420,1080");
options.addArguments("--disable-extensions"); //to disable browser extension popup
options.addArguments("--headless");
options.addArguments("--disable-gpu"); // applicable to windows os only
options.setExperimentalOption("useAutomationExtension", false);
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems

Chrome 驱动程序日志

[1578754796.203][INFO]: Launching chrome: /usr/bin/google-chrome --disable-background-networking --disable-client-side-phishing-detection --disable-default-apps --disable-dev-shm-usage --disable-hang-monitor --disable-popup-blocking --disable-prompt-on-repost --disable-sync --enable-blink-features=ShadowDOMV0 --enable-logging --log-level=0 --no-first-run --no-sandbox --password-store=basic --remote-debugging-port=0 --start-maximized --test-type --use-mock-keychain --user-data-dir=/tmp/.com.google.Chrome.CKtLXZ --window-size=1420,1080 data:,

(google-chrome:29029): Gtk-WARNING **: 15:59:56.269: cannot open display: 
[0111/155956.272402:ERROR:nacl_helper_linux.cc(311)] NaCl helper process running without a sandbox!
Most likely you need to configure your SUID sandbox correctly
[1578754796.304][INFO]: [e36d644ac30ae2e028b2ee00ba18b335] RESPONSE InitSession ERROR unknown error: Chrome failed to start: exited abnormally
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
[1578754796.304][DEBUG]: Log type 'driver' lost 0 entries on destruction
[1578754796.304][DEBUG]: Log type 'browser' lost 0 entries on destruction
4

3 回答 3

0

此处提供的答案指出 Chrome 版本 > 78 是原因。一旦我们恢复水平,问题就解决了:

于 2020-01-17T17:17:38.767 回答
0

此错误消息...

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

...意味着ChromeDriver无法启动/产生新的浏览上下文,即Chrome 浏览器会话。


你需要注意几件事:

  • 该参数的目的是在平台上--disable-gpu启用它是必需的,因为SwiftShader之前在无头模式下的 Windows 上的断言失败。此问题已通过Headless解决:使 --disable-gpu 标志不必要。当您在上时,您需要删除以下代码行:

    options.addArguments("--disable-gpu"); // applicable to windows os only
    
  • 根据您使用chrome=79.0的问题,您需要确保:
  • 当您添加ExperimentalOption时:

    options.setExperimentalOption("useAutomationExtension", false);
    
    • 您还需要添加ExperimentalOption

      options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
      
    • 但是您需要删除:

      options.addArguments("disable-infobars"); // disabling infobars
      options.addArguments("--disable-extensions"); //to disable browser extension popup
      

参考

您可以在以下位置找到相关的详细讨论:

于 2020-01-11T13:09:05.767 回答
0

我有这个问题。我安装了最新版本的“webdrivers”Rubygem (~> 4.2.0)。然后,在我的服务器上,我运行:

whereis google-chrome

并得到“/usr/bin/google-chrome”

我使用 ruby​​,现在可以用

options = Selenium::WebDriver::Chrome::Options.new(args: ['headless'], binary: '/usr/bin/google-chrome')
driver = Selenium::WebDriver.for(:chrome, options: options)
于 2020-02-07T03:54:26.910 回答