Передача переменной в page.evaluate - PhantomJS
Можно ли передавать переменные в странице .evaluate в моем случае ниже?
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(); }
});
}
Я попробовал несколько методов, найденных в Интернете, но ничего невозможного для его переменных не удалось.
Заранее вам за помощь:)
Ответы
Ответ 1
Как обычно, ответ четко изложен в документации функции evaluate
:
Начиная с PhantomJS 1.6, JSON-сериализуемые аргументы могут быть переданы функции. В следующем примере текстовое значение элемента DOM извлекается. Следующий пример достигает той же конечной цели, что и предыдущий пример, но элемент выбирается на основе селектора, который передается на вызов оценки:
В следующем примере показано использование:
var title = page.evaluate(function(s) {
return document.querySelector(s).innerText;
}, 'title');
console.log(title);
Ответ 2
У меня есть 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
Ответ 3
Я использую фантом 4.0.4, у меня ниже работает, https://www.npmjs.com/package/phantom
var arg = 'test'
page.evaluate(function(arg) {
console.log(arg)
}, arg);