我正在尝试下载几乎完全由 JavaScript 生成的网站的 HTML。所以,我需要模拟浏览器访问并且一直在玩PhantomJS。问题是,该站点使用 hashbang URL,我似乎无法让 PhantomJS 处理 hashbang——它只是不断调用主页。
该网站是http://www.regulations.gov。默认将您带到#!home。我尝试使用以下代码(来自此处)来尝试处理不同的 hashbang。
if (phantom.state.length === 0) {
if (phantom.args.length === 0) {
console.log('Usage: loadreg_1.js <some hash>');
phantom.exit();
}
var address = 'http://www.regulations.gov/';
console.log(address);
phantom.state = Date.now().toString();
phantom.open(address);
} else {
var hash = phantom.args[0];
document.location = hash;
console.log(document.location.hash);
var elapsed = Date.now() - new Date().setTime(phantom.state);
if (phantom.loadStatus === 'success') {
if (!first_time) {
var first_time = true;
if (!document.addEventListener) {
console.log('Not SUPPORTED!');
}
phantom.render('result.png');
var markup = document.documentElement.innerHTML;
console.log(markup);
phantom.exit();
}
} else {
console.log('FAIL to load the address');
phantom.exit();
}
}
此代码生成正确的 hashbang(例如,我可以将 hash 设置为 '#!contactus'),但它不会动态生成任何不同的 HTML——只是默认页面。但是,它确实正确输出了我调用document.location.hash
.
我也尝试将初始地址设置为 hashbang,但是脚本只是挂起并且没有做任何事情。例如,如果我将 url 设置http://www.regulations.gov/#!searchResults;rpp=10;po=0
为脚本,则在将地址打印到终端后挂起,并且什么也没有发生。