我正在使用PhantomJS + wget在javascript页面上查看页面内容(这是我的目标)。
这是我使用的命令:
$ phantomjs save_page.js http://wzdig.pbc.gov.cn:8080/dig/ui/advsearch.action > page.html
beeing save_page.js
var system = require('system');
var page = require('webpage').create();
page.open(system.args[1], function()
{
console.log(page.content);
phantom.exit();
});
但是html显示“请开启JavaScript并刷新该页”,这意味着“激活javascript”。
我做错了什么?
感谢。
答案 0 :(得分:2)
您需要设置userAgent
,此脚本有效:
var page = require('webpage').create({viewportSize:{width: 1600,height: 900},
settings:{userAgent:'Mozilla/5.0 (X11; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0',
javascriptEnabled:'true',
loadImages:'false'
}});
var system = require('system');
page.open(system.args[1], function(){
setTimeout(function(){
console.log(page.content);
phantom.exit();
},3000);
});
答案 1 :(得分:2)
请参阅该行下方的更新。
您的示例不起作用的原因是棘手的目标页面,它测试页面是否在可以执行javscript的真实浏览器中打开。第一次加载页面时,您的浏览器将获得一个javascript来执行。然后第二次加载页面时会显示真实页面。
但是在您的示例中,脚本在第一页加载后立即退出。
一个更好的解决方案,不依赖于3秒的超时(连接到中国站点通常很慢,我们不能100%确定3秒就足够了。)
var system = require('system');
var page = require('webpage').create();
var system = require('system');
var page = require('webpage').create();
// Imitate a real browser
page.viewportSize = { width: 1440, height: 900 };
page.settings.userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36";
// Called every time a page is loaded
page.onLoadFinished = function(){
// If the real page with search controls is loaded
// then get page.content and exit
var inputCount = page.evaluate(function(){
return document.querySelectorAll(".jfk-textinput").length;
});
if(inputCount > 0) {
console.log(page.content);
phantom.exit();
}
};
page.open(system.args[1]);
<强>更新强>
好的,所以你可能会在搜索结果之后。在这种情况下,您可以更改决定页面已加载到此解决方案的逻辑:
var inputCount = page.evaluate(function(){
return document.querySelectorAll("h3").length;
});
...因为找到的文章的标题是用&lt; h3&gt;输出的。标签