我正在尝试下载一个几乎完全由JavaScript生成的网站的HTML。因此,我需要模拟浏览器访问,并一直在尝试使用PhantomJS。问题是,该网站使用hashbang URL,而我似乎无法让PhantomJS处理hashbang - 它只会调用首页。
该网站是http://www.regulations.gov。默认情况下,它会带你去#!home。我已经尝试使用以下代码(来自here)来尝试处理不同的hashbangs。
这段代码可以生成正确的hashbang(例如,我可以将hash设置为“#!contactus”),但它不会动态生成任何不同的HTML - 只有默认页面。但是,当我调用
我还尝试将初始地址设置为hashbang,但是然后脚本就会挂起并且不执行任何操作。例如,如果我将URL设置为
该网站是http://www.regulations.gov。默认情况下,它会带你去#!home。我已经尝试使用以下代码(来自here)来尝试处理不同的hashbangs。
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
,则脚本在将地址打印到终端后就会挂起,什么也不会发生。