文字列からページを作成することは可能ですか?
例:
html = '<html><body>blah blah blah</body></html>'
page.open(html, function(status) {
// do something
});
私はすでに上記のことを運なしで試しました...
また、私はphantomjs-node(https://github.com/sgentle/phantomjs-node)でnodejsを使用していることを言及する価値があると思います
ありがとう!
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>
とてもシンプルです colorwheel.js の例を見てください。
var page = require('webpage').create();
page.content = '<html><body><p>Hello world</p></body></html>';
それで全部です!次に、ページを操作できます。画像としてレンダリングします。
これを行うには、ページのコンテンツを文字列に設定する必要があります。
_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)などのキーにドットを含めることでアクセスできます
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");
_
私は最近同様のニーズがあり、file://スタイル参照をURLパラメータとして渡すことができることを発見したので、HTML文字列をローカルファイルにダンプしてから、キャプチャスクリプト(Django_screamshot)への完全パスを渡しました。基本的にcasperjsとphantomjs + capture.jsスクリプトを使用します。
とにかく、それはうまくいくだけで、かなり高速です。