【发布时间】:2014-01-23 08:35:50
【问题描述】:
我有一个使用 Selenium Webdriver 从站点获取一些信息的应用程序。它在 FirefoxDriver 和 ChromeDriver 上运行良好,但是当我尝试切换到 PhantomJSDriver 时,我遇到了一些困难。
- 在 Windows 机器上,它正常启动,然后立即开始一遍又一遍地吐出以下行:
2014 年 1 月 5 日下午 7:28:43 org.apache.http.impl.client.DefaultRequestDirector tryEx ecute INFO:处理请求时捕获的 I/O 异常 (org.apache.http.NoHttpResponseException):目标服务器未能响应
这可能会重复数百次,持续大约 10 分钟,直到最终加载页面;有时它甚至根本无法加载它。
- 在 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