简体   繁体   English

org.openqa.selenium.WebDriverException:使用Selenium Java和Webdriver时连接被拒绝(Linux头没有Xvfb)

[英]org.openqa.selenium.WebDriverException: connection refused while using Selenium Java and webdriver (linux headless with Xvfb)

Recently i got a new virtual server which im trying to configure since some days to make my Java (8) based selenium web app running. 最近,我得到了一个新的虚拟服务器,由于几天以来我一直在尝试对其进行配置,以使基于Java(8)的硒Web应用程序能够运行。 This webapp is running inside a tomcat (8.5.31) and is using selenium for some basic website scraping. 该webapp在Tomcat(8.5.31)中运行,并使用硒进行一些基本的网站抓取。 The OS of the server is gentoo (before i had a debian system which was running fine) 服务器的操作系统是gentoo(在我拥有运行良好的debian系统之前)

I spend already some days to make it work but now im stuck at the following error: 我已经花了几天的时间来使它工作,但现在我陷入了以下错误:

1526203737341   geckodriver     INFO    geckodriver 0.20.1
1526203737367   geckodriver     INFO    Listening on 127.0.0.1:25016
1526203737796   mozrunner::runner       INFO    Running command: "/usr/bin/firefox-bin" "-marionette" "-profile" "/tmp/rust_mozprofile.ESuH8rdqpwT8"
1526203737802   geckodriver::marionette DEBUG   Waiting 60s to connect to browser
1526203739872   Marionette      INFO    Listening on port 2828
1526203797867   webdriver::server       DEBUG   <- 500 Internal Server Error {"value":{"error":"unknown error","message":"connection refused","stacktrace":""}}
11:29:57.944 [pool-2-thread-1] ERROR test.Test - Exception occured while processing.
org.openqa.selenium.WebDriverException: connection refused
Build info: version: '3.12.0', revision: '7c6e0b3', time: '2018-05-08T14:04:26.12Z'
System info: host: 'gentoo', ip: 'xxx.xxx.xxx.xxx', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.95-gentoo', java.version: '1.8.0_172'
Driver info: driver.version: FirefoxDriver

This is what the process list is showing: 这是进程列表显示的内容:

root      7808     1  0 14:36 ?        00:00:00   /usr/bin/Xvfb :99 -screen 0 1600x1200x24 -auth /etc/conf.d/Xvfb.cfg -listen tcp
tomcat    7863     1 59 14:38 ?        00:00:51   /etc/java-config-2/current-system-vm/bin/java -Djava.util.logging.config.file=/opt/tomcat8/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderL
tomcat    7923  7863  0 14:38 ?        00:00:00     /opt/geckodriver --port=31399 -b /usr/bin/firefox-bin
tomcat    7943  7923  6 14:38 ?        00:00:04       /opt/firefox/firefox -marionette --headless -profile /tmp/rust_mozprofile.qpQfCj8DR1ab
tomcat    8032  7943  0 14:38 ?        00:00:00         /opt/firefox/plugin-container -greomni /opt/firefox/omni.ja -appomni /opt/firefox/browser/omni.ja -appdir /opt/firefox/browser 7943 true tab
tomcat    7977     1  0 14:38 ?        00:00:00   dbus-launch --autolaunch 32b951aa6b930bec1f195b765af588f5 --binary-syntax --close-stderr
tomcat    7978     1  0 14:38 ?        00:00:00   /usr/bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
tomcat    7993     1  0 14:38 ?        00:00:00   /usr/libexec/gconfd-2

The Code for creating the Firefox instance (was using more detailed log levels to get some more informations about the problem): 用于创建Firefox实例的代码(使用更详细的日志级别以获取有关该问题的更多信息):

    System.setProperty("webdriver.gecko.driver", driverGeckoPath);

    LoggingPreferences loggingPrefs = new LoggingPreferences();
    loggingPrefs.enable(LogType.BROWSER, Level.ALL);
    loggingPrefs.enable(LogType.CLIENT, Level.ALL);
    loggingPrefs.enable(LogType.DRIVER, Level.ALL);
    loggingPrefs.enable(LogType.PERFORMANCE, Level.ALL);
    loggingPrefs.enable(LogType.PROFILER, Level.ALL);
    loggingPrefs.enable(LogType.SERVER, Level.ALL);

    DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
    desiredCapabilities.setCapability("marionette", true);
    desiredCapabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
    desiredCapabilities.setCapability(CapabilityType.LOGGING_PREFS, loggingPrefs);

    FirefoxOptions options = new FirefoxOptions(desiredCapabilities);
    options.setLogLevel(FirefoxDriverLogLevel.TRACE);

    driver = new FirefoxDriver(options);

The geckodriver lays in /opt/ and is executable. geckodriver位于/ opt /中,并且是可执行的。

My current setup/configuration 我当前的设置/配置

Selenium
All components are having version 3.12.0 (selenium-java, selenium-remote-driver, selenium-firefox-driver, selenium-api) 所有组件都具有版本3.12.0(Selenium-java,selenium-remote-driver,selenium-firefox-driver,selenium-api)

Firefox 火狐浏览器
Version 60.0 版本60.0

geckodriver 壁虎
Version 20.1 20.1版

Xvfb configuration Xvfb配置

XVFB=/usr/bin/Xvfb
XVFBARGS=":99 -screen 0 1600x1200x24 -auth /etc/conf.d/Xvfb.cfg -nolisten tcp"
PIDFILE=/var/run/Xvfb.pid

Xvfb config Xvfb配置

localhost

Xvfb init.d-script Xvfb init.d脚本

start() {
        ebegin "Starting virtual X frame buffer: Xvfb"
        start-stop-daemon --start --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS
        eend ${?}
}

stop() {
        ebegin  "Stopping virtual X frame buffer: Xvfb"
        start-stop-daemon --stop --pidfile $PIDFILE
        eend ${?}
}

Export of display variable (initialized at boot time for all users): 导出显示变量 (在所有用户启动时初始化):

DISPLAY=:99

/etc/conf.d/hostname /etc/conf.d/主机名

gentoo

/etc/hosts / etc / hosts

127.0.0.1       gentoo
127.0.0.1       localhost
::1             localhost


Would appreciate very much any hints/tips to get more informations about how to debug/solve this problem... 非常感谢任何提示/技巧,以获取有关如何调试/解决此问题的更多信息...


Update 1 更新1

I tried running my selenium component with the ChromeDriver which interestingly works . 我尝试用有趣ChromeDriver运行我的硒组件。 The code: 编码:

  System.setProperty("webdriver.chrome.driver", "/opt/chromedriver");
  driver = new ChromeDriver();

The log shows: 日志显示:

Starting ChromeDriver 2.38.552522 (437e6fbedfa8762dec75e2c5b3ddb86763dc9dcb) on port 24646
Only local connections are allowed.


Update 2 更新2

When im running the app in my local environment (similary configured / gentoo) everything works fine. 当我在本地环境(配置类似/ gentoo)中运行应用程序时,一切正常。 But im not using Xvfb here but a xorg-server instead. 但是我不是在这里使用Xvfb,而是在xorg服务器上使用。 This is the logging output: 这是日志记录输出:

1526217622830   geckodriver INFO    geckodriver 0.20.1
1526217622833   geckodriver INFO    Listening on 127.0.0.1:12500
1526217622955   mozrunner::runner   INFO    Running command: "/usr/bin/firefox-bin" "-marionette" "-profile" "/tmp/rust_mozprofile.AZMw0iETRqFj"
1526217622955   geckodriver::marionette DEBUG   Waiting 60s to connect to browser
1526217623246   Marionette  DEBUG   Received observer notification profile-after-change
1526217623372   Marionette  DEBUG   Received observer notification command-line-startup
1526217623372   Marionette  DEBUG   Received observer notification nsPref:changed
1526217624744   Marionette  DEBUG   Received observer notification sessionstore-windows-restored
1526217624816   Marionette  DEBUG   Setting recommended pref toolkit.cosmeticAnimations.enabled to false
1526217624816   Marionette  DEBUG   Setting recommended pref datareporting.policy.dataSubmissionPolicyAccepted to false
1526217624816   Marionette  DEBUG   Setting recommended pref extensions.shield-recipe-client.api_url to 
1526217624847   Marionette  DEBUG   New connections are accepted
1526217624848   Marionette  INFO    Listening on port 34253
1526217624860   geckodriver::marionette DEBUG   Connected to Marionette on localhost:34253
1526217624868   Marionette  DEBUG   Accepted connection 0 from 127.0.0.1:56070

For me it seems to be a connection problem between Marionette and the geckodriver. 对我来说,这似乎是木偶和壁虎驱动程序之间的连接问题。 Could it be a port problem? 可能是港口问题吗? On the server Marionette seems to listen always at port 2828, on my local machine its seems to be always a random port... 在服务器上,木偶似乎总是在端口2828上侦听,在我的本地计算机上,它似乎总是一个随机端口...

This error message... 此错误消息...

1526203737802   geckodriver::marionette DEBUG   Waiting 60s to connect to browser
1526203739872   Marionette      INFO    Listening on port 2828
1526203797867   webdriver::server       DEBUG   <- 500 Internal Server Error {"value":{"error":"unknown error","message":"connection refused","stacktrace":""}}
11:29:57.944 [pool-2-thread-1] ERROR test.test.test.test.test.Test - Exception occured while processing.
org.openqa.selenium.WebDriverException: connection refused

...implies that the GeckoDriver was unable to initiate/spawn a new Web Client session/instance successfully. ...表示GeckoDriver无法成功启动/产生新的Web客户端会话/实例。

Your main issue is the way you have assigned the DesiredCapabilities type of object ie desiredCapabilities to the FirefoxOptions ie to options . 您的主要问题是如何将对象的DesiredCapabilities类型(即desireCapabilities)分配FirefoxOptionsoptions) The proper way would be to pass the DesiredCapabilities class object ie desiredCapabilities through merge() function from MutableCapabilities class into the FirefoxOptions class object as follows : : 正确的方法是将DesiredCapabilities类对象(即, 期望的功能)通过MutableCapabilities类中的merge()函数MutableCapabilitiesFirefoxOptions类对象,如下所示:

System.setProperty("webdriver.gecko.driver", driverGeckoPath);

LoggingPreferences loggingPrefs = new LoggingPreferences();
loggingPrefs.enable(LogType.BROWSER, Level.ALL);
loggingPrefs.enable(LogType.CLIENT, Level.ALL);
loggingPrefs.enable(LogType.DRIVER, Level.ALL);
loggingPrefs.enable(LogType.PERFORMANCE, Level.ALL);
loggingPrefs.enable(LogType.PROFILER, Level.ALL);
loggingPrefs.enable(LogType.SERVER, Level.ALL);

DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
desiredCapabilities.setCapability("marionette", true);
desiredCapabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
desiredCapabilities.setCapability(CapabilityType.LOGGING_PREFS, loggingPrefs);

FirefoxOptions options = new FirefoxOptions();
options.merge(desiredCapabilities);
options.setLogLevel(FirefoxDriverLogLevel.TRACE);

driver = new FirefoxDriver(options);

Update 更新资料

As you are still facing the same error consider performing the following steps : 由于您仍然面临相同的错误,请考虑执行以下步骤:

  • Clean your Project Workspace through your IDE and Rebuild your project with required dependencies only. 通过IDE 清理 项目工作区 ,并仅使用必需的依赖项重建项目。
  • Use CCleaner tool to wipe off all the OS chores before and after the execution of your Test Suite . 在执行测试套件之前和之后,使用CCleaner工具清除所有操作系统杂项。
  • If your base Web Client version is too old, then uninstall it through Revo Uninstaller and install a recent GA and released version of Web Client . 如果您的基本Web客户端版本太旧,请通过Revo Uninstaller卸载它,然后安装最新的GA和Web客户端发行版。
  • Take a System Reboot . 进行系统重启
  • Execute your Test as a non-root user. 以非root用户身份执行Test
  • Always invoke driver.quit() within tearDown(){} method to close & destroy the WebDriver and Web Client instances gracefully. 始终在tearDown(){}方法内调用driver.quit() ,以优雅地关闭和破坏WebDriverWeb Client实例。

For those whom it may concern I had the very same problem and got stuck in "connection refused" fiesta. 对于那些可能会担心的人,我遇到了同样的问题,并陷入了“拒绝连接”的节日。 After two whole night of try and error I found out that my previous processes of geckodriver, selenium and firefox was not closed and I had something around 50 open process. 经过一整夜的尝试和错误,我发现之前的geckodriver,Selenium和firefox进程没有关闭,并且大约有50个打开进程。 This three simple commands solved my problem 这三个简单的命令解决了我的问题

pkill geckodriver
pkill firefox
pkill selenium

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 org.openqa.selenium.WebDriverException:未知错误:.net::ERR_CONNECTION_REFUSED - org.openqa.selenium.WebDriverException: unknown error: net::ERR_CONNECTION_REFUSED org.openqa.selenium.WebDriverException:无法使用Selenium和ChromeDriver访问Chrome - org.openqa.selenium.WebDriverException: chrome not reachable using Selenium and ChromeDriver org.openqa.selenium.WebDriverException:java.io.IOException:使用GeckoDriver调用getCookies()时,连接上的流意外结束 - org.openqa.selenium.WebDriverException: java.io.IOException: unexpected end of stream on Connection while invoking getCookies() with GeckoDriver org.openqa.selenium.WebDriverException: disconnected: not connected to DevTools error using ChromeDriver Chrome using Selenium and Java - org.openqa.selenium.WebDriverException: disconnected: not connected to DevTools error using ChromeDriver Chrome using Selenium and Java org.openqa.selenium.WebDriverException:未知错误:无法使用ChromeDriver Selenium和Java聚焦元素 - org.openqa.selenium.WebDriverException: unknown error: cannot focus element using ChromeDriver Selenium and Java org.openqa.selenium.WebDriverException:[异常…“组件未初始化”错误使用 GeckoDriver 和 Tor 浏览器与 Selenium ZD52387880E1EA22817A7Z2D3759213891 - org.openqa.selenium.WebDriverException: [Exception… “Component not initialized” error using GeckoDriver and Tor browser with Selenium Java org.openqa.selenium.WebDriverException: chrome 无法访问 - org.openqa.selenium.WebDriverException: chrome not reachable org.openqa.selenium.WebDriverException:通过Selenium v​​3.4.0和geckodriver-v0.20.1启动Firefox浏览器45.0.1时,连接被拒绝 - org.openqa.selenium.WebDriverException: connection refused while launching Firefox Browser 45.0.1 through Selenium v3.4.0 and geckodriver-v0.20.1 org.openqa.selenium.WebDriverException: java.net.ConnectException: 无法使用 GeckoDriver Firefox 和 Selenium 连接到 localhost/0:0:0:0:0:0:0 - org.openqa.selenium.WebDriverException: java.net.ConnectException: Failed to connect to localhost/0:0:0:0:0:0:0 using GeckoDriver Firefox and Selenium 线程“主”org.openqa.selenium.WebDriverException 中的异常:未知错误:使用 Selenium Java 的意外命令响应 - Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: unexpected command response using Selenium Java
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM