【问题标题】:PhantomjsDriver not working on both Windows and LinuxPhantomjsDriver 不能在 Windows 和 Linux 上运行
【发布时间】:2014-01-23 08:35:50
【问题描述】:

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

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

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

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

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

线程“thread1”中的异常 org.openqa.selenium.remote.UnreachableBrowserException:不能 开始一个新的会话。可能的原因是远程地址无效 服务器或浏览器启动失败。构建信息:版本:'未知', 修订:'未知',时间:'未知'系统信息:主机:'穿山甲', 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 毫秒后可用 在 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 在 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");

【问题讨论】:

  • @user1177636,感谢您的回复。我不认为我的代码是罪魁祸首,但我还是发布了它。
  • 然后我收到一条错误消息,提示我需要指定可执行位置。 java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 phantomjs.binary.path 能力/系统属性/PATH 变量设置
  • 对不起 - 你介意告诉我具体怎么做吗?我在文档中看到了一些代码,但这有点令人困惑。
  • 好吧,我让它在 Windows 上运行(具有功能)。我运行了其他一些 FFDriver 实例,当我关闭它们时,它开始工作而没有错误。我想有太多的端口被占用?仍然希望让它在 Linux 上运行。

标签: java selenium selenium-webdriver phantomjs


【解决方案1】:

如果它在 Linux 上仍然不适合您,请尝试下面的代码,它在 Mac 上适合我。

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

【讨论】:

    【解决方案2】:

    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 
    }
    

    【讨论】:

    • 感谢您的回复。我从未使用过 Selenium Server - 只是普通的 webdriver。为什么我现在需要使用它? phantomjsdriver 是否只使用远程服务器?我怎么知道集线器地址是什么——我不是想在远程机器上运行它。
    • Yes 从终端或 cmd 启动本地机器上的 Selenium Server (java -jar ) 你会在命令提示符下看到集线器地址,通常是 (127.0.0.1:4444/wd/hub) 解析集线器 url,运行您的测试,您应该能够在终端/命令提示符上看到输出
    • 我看到这个答案有很多页面浏览量。我没有接受 Zach 的回答,因为我无法让它为自己工作,也不想使用 Selenium Server,但很有可能它是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    相关资源
    最近更新 更多