ページで変数を渡すことは可能ですか?以下の場合、評価しますか?
function myFunction(webpage, arg1, arg2){
var page = require('webpage').create();
page.viewportSize = { width: 1920, height: 1080 };
page.open(webpage, function (status){
if (status == 'success') {
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js", function(){
page.evaluate(function(){
arg = arg1 + arg2;
console.log(arg);
});
});
}
else { phantom.exit(); }
});
}
私はインターネットで見つけたいくつかの方法を試しましたが、実際にその変数に到達することは不可能ではありません。
よろしくお願いします:)
いつものように、答えは documentation of evaluate
関数で明確に述べられています:
PhantomJS 1.6以降、JSONシリアル化可能な引数を関数に渡すことができます。次の例では、DOM要素のテキスト値が抽出されます。次の例は、前の例と同じ最終目標を達成しますが、要素は、evaluate呼び出しに渡されるセレクターに基づいて選択されます。
次の例は、使用方法を示しています。
var title = page.evaluate(function(s) {
return document.querySelector(s).innerText;
}, 'title');
console.log(title);
私はphantomjs 1.5.0を持っているので、1.6以降のバージョンをコンパイルする代わりに、代替ソリューションを探しました。
したがって、selectors.jsファイルに引数を保存しました
-------------selectors.js starts----------------
var selectors = "div.Nice"
-------------selectors.js ends----------------
そしてそれらをページに挿入しました:
page.injectJs("selectors.js");
詳細はここにあります: http://phantomjs.org/api/webpage/method/inject-js.html
私はファントム4.0.4を使用していますが、以下でうまくいきます https://www.npmjs.com/package/phantom
var arg = 'test'
page.evaluate(function(arg) {
console.log(arg)
}, arg);