web-dev-qa-db-ja.com

PhantomJSは文字列からページを作成します

文字列からページを作成することは可能ですか?

例:

html = '<html><body>blah blah blah</body></html>'

page.open(html, function(status) {
  // do something
});

私はすでに上記のことを運なしで試しました...

また、私はphantomjs-node(https://github.com/sgentle/phantomjs-node)でnodejsを使用していることを言及する価値があると思います

ありがとう!

34
mike

Phantomjs [〜#〜] api [〜#〜] を見ると、page.openは最初の引数としてHTML文字列ではなくURLを必要とします。これが、試した結果が機能しない理由です。

ただし、文字列からページを作成する効果を得ることができる1つの方法は、空の「スケルトンページ」を、URL(localhostの可能性がある)を使用してホストし、Javascript(includeJsを使用)を空のページ。空白ページに含めるJavaScriptは、document.write("<p>blah blah blah</p>")を使用して、コンテンツをWebページに動的に追加できます。

私はこれをやったことがありますが、これはうまくいくはずです。

スケルトンページの例:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head></head>
<body></body>
</html>
2
laker

とてもシンプルです colorwheel.js の例を見てください。

var page = require('webpage').create();
page.content = '<html><body><p>Hello world</p></body></html>';

それで全部です!次に、ページを操作できます。画像としてレンダリングします。

121
Ariya Hidayat

これを行うには、ページのコンテンツを文字列に設定する必要があります。

_phantom.create(function (ph) {
  ph.createPage(function (page) {
      page.set('viewportSize', {width:1440,height:900})

      //like this
      page.set('content', html);

      page.render(path_to_pdf, function() { 
        //now pdf is written to disk.
        ph.exit();
      });
  });
});
_

hTMLコンテンツを設定するには、page.set()を使用する必要があります。

に従って https://github.com/sgentle/phantomjs-node#functionality-details

プロパティを直接取得/設定することはできません。
代わりにpage.get( 'version'、callback)またはpage.set( 'viewportSize'、{width:640、height :480})など.

ネストされたオブジェクトには、page.set( 'settings.loadImages'、false)などのキーにドットを含めることでアクセスできます

18
rahulroy9202

PhantomJSバージョン2.0.0で動作するように以下を取得しました。以前は、page.open()を使用してファイルシステムからページを開き、コールバックを設定していました。

_page.open("bench.html", pageLoadCallback);
_

次に、HTMLページの文字列変数から同じことを行います。 page.setContent()メソッドは2番目の引数としてURLを必要とし、これはfs.absolute()を使用してfile:// URLを構築します。

_page.onLoadFinished = pageLoadCallback;
page.setContent(bench_str, "file://" + fs.absolute(".") + "/bench.html");
_
2
Klortho

私は最近同様のニーズがあり、file://スタイル参照をURLパラメータとして渡すことができることを発見したので、HTML文字列をローカルファイルにダンプしてから、キャプチャスクリプト(Django_screamshot)への完全パスを渡しました。基本的にcasperjsとphantomjs + capture.jsスクリプトを使用します。

とにかく、それはうまくいくだけで、かなり高速です。

2
MGM