Подтвердить что ты не робот

Передача переменной в 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(); }

});

}

Я попробовал несколько методов, найденных в Интернете, но ничего невозможного для его переменных не удалось.

Заранее вам за помощь:)

4b9b3361

Ответ 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);