5

ドキュメントがすべてのURLを介して特別なファイル名にロードされ、リンクがなどの絶対URLに変換された後、特別なWebページを保存したいと思いますwget -k

//phantomjs
var page = require('webpage').create();
var url = 'http://google.com/';
page.open(url, function (status) {
var js = page.evaluate(function () {
return document;
});
console.log(js.all[0].outerHTML);
phantom.exit();
});

たとえば、私のhtmlコンテンツは次のようになります。

<a href="//page.html">page</a>

でなければなりません

<a href="http://google.com/page.html">page</a>

これは私のサンプルスクリプトですが、wget -kphantomjsを使用するなど、すべてのURLとリンクを変換するにはどうすればよいですか?

4

2 に答える 2

6

最終的なHTMLを変更して、<base>タグを付けることができます。これにより、すべての相対URLが機能するようになります。あなたの場合は、ページ<base href="http://google.com/">の直後に置いてみ<head>てください。

于 2013-04-23T12:57:44.217 に答える
2

PhantomJSは実際にはサポートされていませんが、単なるHTTPクライアントではありません。メインのランディングページに画像付きのランダムなコンテンツをプルするJavaScriptコードがあると想像してみてください。

回避策は、DOM内の参照されているすべてのリソースを置き換えることです。これは、CSS3セレクター(aの場合はhref、imgの場合はsrcなど)とベースURLを基準にした手動パス解決を使用して可能です。本当にすべてのリソースURLを追跡して登録する必要がある場合は、ネットワークトラフィック監視機能を使用してください。

最後になりましたが、生成されたコンテンツを取得するには、とを使用page.contentした複雑なダンスの代わりにevaluate使用できますouterHTML

于 2013-01-29T06:04:41.893 に答える