我有一个使用 Selenium Webdriver 从站点获取一些信息的应用程序。它在 FirefoxDriver 和 ChromeDriver 上工作得很好,但是当我尝试切换到 PhantomJSDriver 时,我遇到了一些困难。
- 在 Windows 机器上,它正常启动,然后立即开始一遍又一遍地输出以下几行:
一月 05, 2014 7:28:43 PM org.apache.http.impl.client.DefaultRequestDirector tryEx
执行
信息:处理请求时捕获 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' 驱动程序信息:
驱动程序版本: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:等待驱动程序超时
服务器启动。构建信息:版本:'未知',修订版:'未知',
时间:'未知'系统信息:主机:'穿山甲',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
EDIT只是为了澄清,我认为这与我的代码没有任何关系; 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");