我想使用phantomjs(版本1.9.1,在Windows上)访问一些QUnit测试网址。我在公司网站的代理背后,但我试图访问的URL是从我的本地开发工作站提供的,另外我甚至尝试在没有必要的情况下使用其他两个浏览器(Hv3和Dooble)访问相同的URL代理设置,即使他们无法执行QUnit JavaScript,他们也会获得HTML响应。为什么我没有收到phantomjs页面响应?
所以我甚至试着调整javascriptEnabled设置(加上另外几个设置,请参阅下面的代码)为false,试图获取原始HTML,但无济于事。我在try/catch中将我的调用封装到了page.open中,但显然这不是因为异常;而是在最终的phantom.exit()语句执行之前立即使用console.log语句。
此外,我遵循https://github.com/ariya/phantomjs/wiki/Network-Monitoring的建议,包括从page.onResourceRequested,page.onError和page.onResourceReceived进行日志记录,并且只有onResourceReceived的回调被执行。而我指定--proxy-type = none命令行参数,都无济于事。
代码和输出如下,在此先感谢。我无所适从;也许这是一个幻影问题?只是想在报告之前排除所有事情。
CODE:
var page = require('webpage').create();
page.onResourceRequested = function (request) {
console.log('Request ' + JSON.stringify(request, undefined, 4));
};
page.onResourceReceived = function (response) {
console.log('Receive ' + JSON.stringify(response, undefined, 4));
};
page.onError = function (msg, trace) {
console.log(msg);
trace.forEach(function(item) {
console.log(' ', item.file, ':', item.line);
})
}
page.settings.webSecurityEnabled = false;
page.settings.localToRemoteUrlAccessEnabled = true;
//page.settings.javascriptEnabled = false;
for (var setting in page.settings) {
console.log(setting + ": " + page.settings[setting]);
}
try {
page.open('http://local.example.com:9001/test/workflow', function() {
console.log('page opened');
});
}
catch(xcep) {
console.log(xcep);
}
console.log('before exit');
phantom.exit();
OUTPUT:
XSSAuditingEnabled: false
javascriptCanCloseWindows: true
javascriptCanOpenWindows: true
javascriptEnabled: true
loadImages: true
localToRemoteUrlAccessEnabled: true
userAgent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.1 Safari/534.34
webSecurityEnabled: false
Request {
"headers": [
{
"name": "User-Agent",
"value": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.1 Safari/534.34"
},
{
"name": "Accept",
"value": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
}
],
"id": 1,
"method": "GET",
"time": "2013-07-12T09:49:58.262Z",
"url": "http://local.example.com:9001/test/workflow"
}
before exit
感谢,做课程的伎俩。我的想法是我不想在与page.open回调相同的块内使用phantom.exit(),因为我实际上想要连续打开几个页面。我想我可以想办法做到这一点,使用关闭和减少柜台。 –
@GeorgeJempty它对异步操作有点棘手,但是,是的,你可以做到这一点。即使有多个异步操作,您只需要知道何时达到了停止条件。正如你所建议的那样,你可以通过多种方式来应对。 –