ほぼ完全にJavaScriptで生成されたWebサイトのHTMLをダウンロードしようとしています。したがって、ブラウザアクセスをシミュレートする必要があり、PhantomJSで遊んでいます。問題は、サイトがハッシュバンURLを使用していて、PhantomJSにハッシュバンを処理させることができないようです。ホームページを呼び出し続けるだけです。
このサイトはhttp://www.regulations.govです。デフォルトでは、#!homeに移動します。次のコード(ここから)を使用して、さまざまなハッシュバンを処理してみました。
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();
}
}
このコードは正しいハッシュバンを生成しますが(たとえば、ハッシュを「#!contactus」に設定できます)、動的に異なるHTMLを生成することはなく、デフォルトのページだけを生成します。ただし、を呼び出したときの出力は正しく行われますdocument.location.hash
。
また、初期アドレスをハッシュバンに設定しようとしましたが、スクリプトがハングして何もしません。たとえば、URLをhttp://www.regulations.gov/#!searchResults;rpp=10;po=0
スクリプトに設定すると、アドレスを端末に出力した後にハングし、何も起こりません。