使用Firefox的Selenium自动化在本地工作,但在服务器上失败

时间:2019-07-23 16:58:52

标签: java selenium firefox geckodriver

使用Firefox的硒自动化在本地可以运行,但是在服务器上无法运行

  

硒版本:3.141.59

     

Geckodriver版本:0.24.0

     

Firefox版本:68.0.1

     

JDK版本:1.8.0_171

     

本地JRE版本:1.8.0_211

     

服务器JRE版本:1.8.0_191

例外:

org.openqa.selenium.WebDriverException: connection refused
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: host: 'XXXXXXXXXXXXXXX', ip: 'XXX.XXX.XXX.XX', os.name: 'Windows Server 2016', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_191'
Driver info: driver.version: FirefoxDriver
remote stacktrace: 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$errorHandler$0(W3CHandshakeResponse.java:62)
    at org.openqa.selenium.remote.HandshakeResponse.lambda$getResponseFunction$0(HandshakeResponse.java:30)
    at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:126)
    at java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
    at java.util.Spliterators$ArraySpliterator.tryAdvance(Unknown Source)
    at java.util.stream.ReferencePipeline.forEachWithCancel(Unknown Source)
    at java.util.stream.AbstractPipeline.copyIntoWithCancel(Unknown Source)
    at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
    at java.util.stream.FindOps$FindOp.evaluateSequential(Unknown Source)
    at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
    at java.util.stream.ReferencePipeline.findFirst(Unknown Source)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:128)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:74)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:136)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:147)

我正在以无头模式启动Firefox。在本地工作正常,但在Windows服务器上出现上述错误。

代码:

FirefoxProfile profile = new FirefoxProfile(); 
    profile.setPreference("capability.policy.default.Window.QueryInterface", "allAccess"); 
    profile.setPreference("capability.policy.default.Window.frameElement.get","allAccess"); 
    profile.setPreference("browser.download.folderList", 2);
    profile.setPreference("browser.download.dir", System.getProperty("user.dir")+"\\downloads");
    profile.setPreference("browser.download.useDownloadDir", true);
    profile.setAcceptUntrustedCertificates(true); 
    profile.setAssumeUntrustedCertificateIssuer(true); 
    DesiredCapabilities capabilities = new DesiredCapabilities();
    FirefoxOptions options = new FirefoxOptions();
    options.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
    options.setCapability("marionatte", false);
    options.setProfile(profile);
    options.setHeadless(true);
    options.setBinary(browserBinary);   
    options.addPreference("browser.helperApps.neverAsk.saveToDisk", "text/csv");
    options.addPreference("pdfjs.disabled", true);  

    log.info("Starting firefox");
    FirefoxDriver driver = new FirefoxDriver(options);
    driver.getCapabilities().merge(capabilities);

我之前尝试过chromedriver,它在本地和服务器上都能很好地工作。但是我想使用Firefox以无头模式下载文件。

浏览器跟踪日志-

1563908741085   mozrunner::runner   INFO    Running command: "firefox/app/firefox.exe" "-marionette" "-headless" "-foreground" "-no-remote" "-profile" "C:\\Users\\<userid>\\AppData\\Local\\Temp\\rust_mozprofile.cJQJoMJMqDtb"
1563908741101   geckodriver::marionette DEBUG   Waiting 60s to connect to browser on 127.0.0.1:62884
*** You are running in headless mode.
1563908741992   addons.webextension.screenshots@mozilla.org WARN    Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: mozillaAddons
1563908741993   addons.webextension.screenshots@mozilla.org WARN    Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: telemetry
1563908741993   addons.webextension.screenshots@mozilla.org WARN    Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: resource://pdf.js/
1563908741993   addons.webextension.screenshots@mozilla.org WARN    Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: about:reader*
1563908742164   Marionette  TRACE   Received observer notification profile-after-change
1563908742224   Marionette  TRACE   Received observer notification toplevel-window-ready
1563908742271   Marionette  TRACE   Received observer notification command-line-startup
1563908742272   Marionette  TRACE   Received observer notification nsPref:changed
1563908742272   Marionette  DEBUG   Init aborted (running=false, enabled=true, finalUIStartup=false)
1563908742456   Marionette  TRACE   Received observer notification toplevel-window-ready
1563908744415   Marionette  TRACE   Received observer notification marionette-startup-requested
1563908744416   Marionette  TRACE   GFX sanity window detected, waiting until it has been closed...
1563908802148   mozrunner::runner   DEBUG   Killing process 2704
1563908802148   webdriver::server   DEBUG   <- 500 Internal Server Error {"value":{"error":"unknown error","message":"connection refused","stacktrace":""}}

1 个答案:

答案 0 :(得分:0)

您需要在-FirefoxOptions options = new FirefoxOptions();之后启动RemoteDriver。

driver = new RemoteWebDriver(your URL, capabilities);