web-dev-qa-db-ja.com

phantomjsを使用してjavascriptでレンダリングされたhtmlソースを取得します

まず第一に、私は開発またはテスト環境で助けを探していません。また、私はphantomjsを初めて使用します。必要なのは、Linuxターミナルでのphantomjsのコマンドライン操作だけです。

本文がJavaScriptコードでレンダリングされているhtmlページがあります。必要なのは、phantomjsを使用してレンダリングされたhtmlコンテンツをダウンロードしたかったことです。

Phantomjsを使用することはわかりません。私はシェルスクリプトの経験が少しあります。だから私はcurlでこれをやろうとしました。しかし、curlはjavascriptをレンダリングするのに十分ではないため、デフォルトのソースコードのhtmlのみを取得できました。レンダリングされたコンテンツはダウンロードされませんでした。 Ruby mechanizeがこの仕事をするかもしれないと聞きましたが、Rubyについての知識がありません。さらに調査したところ、コマンドラインツールphantomjsが見つかりました。 phantomjs

提供する必要のあるすべての追加情報については、お気軽にお問い合わせください。

17

残念ながら、PhantomJSコマンドラインだけではそれは不可能です。 PhantomJSで実際に何かを実行するには、Javascriptファイルを使用する必要があります。

これは、使用できるスクリプトの非常に単純なバージョンです。

ほとんどが https://stackoverflow.com/a/12469284/4499924 からコピーされたコード

printSource.js

var system = require('system');
var page   = require('webpage').create();
// system.args[0] is the filename, so system.args[1] is the first real argument
var url    = system.args[1];
// render the page, and run the callback function
page.open(url, function () {
  // page.content is the source
  console.log(page.content);
  // need to call phantom.exit() to prevent from hanging
  phantom.exit();
});

ページソースを標準出力に印刷します。

phantomjs printSource.js http://todomvc.com/examples/emberjs/

ページソースをファイルに保存するには

phantomjs printSource.js http://todomvc.com/examples/emberjs/ > ember.html

19
Daniel Ma
var pagehtml = page.evaluate("function() {"+ 
  "return '<html><head>' + document.head.innerHTML + '</head>' + '<body>' + document.body.innerHTML + '</body></html>';" + 
"}");


fs.write('output.html',pagehtml,'w');
0