PhantomjsDriver不兼容Windows和Linux

时间:2014-01-06 01:23:49

标签: java selenium selenium-webdriver phantomjs

我有一个使用Selenium Webdriver的应用程序从站点获取一些信息。它适用于FirefoxDriver和ChromeDriver,但当我尝试切换到PhantomJSDriver时,遇到了一些困难。

  1. 在Windows计算机上,它正常启动,然后立即开始一遍又一遍地吐出以下行:
  2.   

    2014年1月5日下午7:28:43 org.apache.http.impl.client.DefaultRequestDirector tryEx   ecute   INFO:处理请求时捕获的I / O异常(org.apache.http.NoHttpResponseException):目标服务器无法响应

    这可能会重复几百次,持续大约10分钟,直到它最终加载页面为止;有时它根本无法加载它。

    1. 在Linux计算机上,它尝试启动,然后返回以下内容:
    2.   

      线程中的异常" thread1"   org.openqa.selenium.remote.UnreachableBrowserException:不能   开始一个新的会议。可能的原因是遥控器的无效地址   服务器或浏览器启动失败。构建信息:版本:'未知',   修订:'未知',时间:'未知'系统信息:主持人:' pangolin',   ip:' 128.238.32.20',os.name:' Linux',os.arch:' amd64',os.version:   ' 2.6.32-39-generic',java.version:' 1.7.0'司机信息:   driver.version:PhantomJSDriver           在org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:548)           在org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:216)           在org.openqa.selenium.remote.RemoteWebDriver。(RemoteWebDriver.java:111)           在org.openqa.selenium.remote.RemoteWebDriver。(RemoteWebDriver.java:115)           在org.openqa.selenium.phantomjs.PhantomJSDriver。(PhantomJSDriver.java:107)           在org.openqa.selenium.phantomjs.PhantomJSDriver。(PhantomJSDriver.java:96)            引起:org.openqa.selenium.WebDriverException:超时等待驱动程序   服务器启动。构建信息:版本:'未知',修订版:'未知',   时间:'未知'系统信息:主持人:' pangolin',ip:' 128.238.32.20',   os.name:' Linux',os.arch:' amd64',os.version:' 2.6.32-39-generic',   java.version:' 1.7.0'驱动程序信息:driver.version:PhantomJSDriver           在org.openqa.selenium.remote.service.DriverService.start(DriverService.java:165)           在org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:62)           在org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:527)           ... 7更多引起:org.openqa.selenium.net.UrlChecker $ TimeoutException:超时等待   [http:// localhost:16050 / status]在20002 ms后可用           在org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:104)           在org.openqa.selenium.remote.service.DriverService.start(DriverService.java:163)           ... 9更多原因:com.google.common.util.concurrent.UncheckedTimeoutException:   java.util.concurrent.TimeoutException           在com.google.common.util.concurrent.SimpleTimeLimiter.callWithTimeout(SimpleTimeLimiter.java:143)           在org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:79)           ... 10更多引起:java.util.concurrent.TimeoutException           at java.util.concurrent.FutureTask $ Sync.innerGet(FutureTask.java:258)           在java.util.concurrent.FutureTask.get(FutureTask.java:119)           在com.google.common.util.concurrent.SimpleTimeLimiter.callWithTimeout(SimpleTimeLimiter.java:130)           ......还有11个

      我做错了什么?我已经阅读了很多关于Phantomjs如何比其他驱动程序快得多的内容,并且非常想使用它,但是如果加载每个页面需要10分钟,那显然不可行。

      我正在运行Selenium WebDriver版本2.38.0和Phantomjs版本1.9.2。

      非常感谢您提前, BSG

      修改 只是为了澄清,我不认为这与我的代码有任何关系; Linux上的错误正在我试图启动PhantomJS驱动程序的行中抛出。

         DesiredCapabilities caps = new DesiredCapabilities();
          caps.setJavascriptEnabled(true);                       
          caps.setCapability(
              PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,
              phantombinary//"/home/p/phantomjs-1.9.2-linux-x86_64/bin/phantomjs"
          );
      
          // Launch driver (will take care and ownership of the phantomjs process)
           WebDriver driver = new PhantomJSDriver(caps);
          System.out.println("starting driver");
      

2 个答案:

答案 0 :(得分:5)

如果在Linux上仍然无法使用,请尝试下面的代码,它适用于Mac。

capabilities.setCapability("phantomjs.binary.path", "path of phantom binary/phantomjs")

答案 1 :(得分:1)

org.openqa.selenium.remote.UnreachableBrowserException显然与Phantom有关。在Windows上确保Phantom正在运行(设置环境变量并添加PATH) 检查远程计算机集线器地址是否正确,您应该能够运行phantomjs。

注意:Selenium Server必须在所需的远程计算机上运行。

DesiredCapabilities phantomBeast = DesiredCapabilities.phantomjs();

try {
    webDriverInstance = new RemoteWebDriver(new URL(hubUrl), phantomBeast);
} catch (Exception e) {
    //Do something 
}