我希望通过 WebDriver/RemoteWebDriver 使用 PhantomJS 来监控和测试整个页面加载过程中的网络活动。我已经做到了 PhantomJS 可以做 Chrome 或 Firefox 可以做的所有事情——加载页面、访问 DOM 等等。
但是,我不确定从这里去哪里才能像我在 JavaScript PhantomJS 示例中看到的那样访问请求和响应 HTTP 标头。GhostDriver Javadocs 似乎没有提及它。
有人做过吗?
我希望通过 WebDriver/RemoteWebDriver 使用 PhantomJS 来监控和测试整个页面加载过程中的网络活动。我已经做到了 PhantomJS 可以做 Chrome 或 Firefox 可以做的所有事情——加载页面、访问 DOM 等等。
但是,我不确定从这里去哪里才能像我在 JavaScript PhantomJS 示例中看到的那样访问请求和响应 HTTP 标头。GhostDriver Javadocs 似乎没有提及它。
有人做过吗?
WebDriver API不公开 HTTP 请求和响应标头或状态代码。PhantomJS 可能允许您获取它们,但 WebDriver API 不会公开它们。这是该项目的一些用户之间的一些争论点,但它不会改变,而且这个决定有充分的理由这样做。您也许可以通过巧妙地使用 WebDriver 的executeScript()
方法来操纵 PhantomJS 检索该信息的能力(如果它允许的话),但我真的不知道这是否可行。
尝试使用Jaunt API。它是无头的,支持检索响应头。
功能包括(取自链接):
HTML、XHTML、XML 解析。协议:HTTP、HTTPS、基本身份验证。通过字段标签/名称/序列填写表格。自动形式排列。文件下载/上传。保存完整的网页(图像、js、css 等)。表数据提取。DOM 导航、搜索和搜索链。启用正则表达式的查询。HTTP 标头/cookie 操作。HTTP/HTTPS 代理支持。可定制的缓存和内容处理程序。分页发现。100% Java(无依赖)
基于这个答案,我能够让它在 Java 和 Selenium 3.4 中工作。
在你的项目中创建一个资源文件;叫它netlog.js
:
var page = this;
page.onResourceRequested = function(request) {
console.log('Request ' + JSON.stringify(request, undefined, 4));
};
page.onResourceReceived = function(response) {
console.log('Receive ' + JSON.stringify(response, undefined, 4));
};
然后从您的 Java 代码中,启用这样的日志记录:
import org.apache.commons.io.IOUtils;
String script = IOUtils.toString(getClass().getResourceAsStream("/netlog.js"));
((PhantomJSDriver) driver).executePhantomJS(script);
所有日志都将转到 stderr。
PhantomJS 网站上有一些额外的讨论。