PhantomJSメモ2
colorwheel.js
HTML5 canvasを使ってカラーホイールを作成しPNGで保存
// 空ページ作成 var page = require('webpage').create(); // サイズを400x400に変更 page.viewportSize = { width: 400, height : 400 }; // canvasを持つhtmlの作成 page.content = '<html><body><canvas id="surface"></canvas></body></html>'; // カラーホイールを作成するjavascriptを記述 page.evaluate(function() { (...) }
rasterize.js
ウェブページのキャプチャーをPDFで保存する。すごく便利
使い方:
phantomjs rasterize.js http://phantomjs.org/ home.pdf
他にもサイズ、書式、ズームが指定できる
- paperSize
PDFで出力するときのページサイズを指定する。フォーマットは以下のような形
{ width: '200px', height: '300px', border: '0px' } { format: 'A4', orientation: 'portrait', border: '1cm' }
- zoomFactor
render()やrenderBase64()でレンダリングするときのスケール要素
// デフォルトは1(100%) page.zoomFactor = 0.25; // 25% page.render('capture.png');
statusがsuccessかどうかで読み込めたかを判断できる
page.open(address, function (status) { if (status !== 'success') { console.log('Unable to load the address!'); phantom.exit(); } (...) }
render_multi_url.js
複数のページをPNG形式でキャプチャー
使い方:
phantomjs render_multi_url.js www.google.com www.bbc.co.uk www.phantomjs.org
settings
ウェブページのさまざまな設定。この設定はWebPage#openのときに適用される。WebPage#open後の変更は適用されない- javascriptEnabled
ページ内のjavascriptを実行するかどうか。デフォルトはtrue - loadImages
画像を読み込むかどうか。デフォルトはtrue - localToRemoteUrlAccessEnabled
ローカルリソースからリモートURLにアクセスできるかどうか。デフォルトはfalse - userAgent
サーバに送信するユーザーエージェント。ユーザーエージェント一覧 - userName
HTTP認証で用いる名前 - password
HTTP認証で用いるパスワード - XSSAuditingEnabled
XSSフィルターを有効にするかどうか。デフォルトはfalse - webSecurityEnabled
web securityを可能にすべきかどうか。デフォルトはtrue
- javascriptEnabled
URL毎にcallbackPerUrl()、すべてが終わったらcallbackFinal()を呼び出すようにしている
RenderUrlsToFile = function(urls, callbackPerUrl, callbackFinal) { (...) }; (...) RenderUrlsToFile(arrayOfUrls, (function(status, url, file) { if (status !== "success") { return console.log("Unable to render '" + url + "'"); } else { return console.log("Rendered '" + url + "' at '" + file + "'"); } }), function() { return phantom.exit(); });
technews.js
Google NewsをPNG形式でキャプチャー
(...) page.evaluate(function () { var body = document.body; // 背景色を変更 body.style.backgroundColor = '#fff'; // div#title-block要素を表示しない body.querySelector('div#title-block').style.display = 'none'; // form#edition-picker-formの親の親の要素を表示しない body.querySelector('form#edition-picker-form').parentElement.parentElement.style.display = 'none'; }); (...)