Нажмите на ссылку с phantom.js и получить документ html


Я новичок с phantom.js и я пытаемся перейти на страницу веб-сайта, нажать на ссылку (которая вызывает функцию AJAX и изменяет HTML-код документа) с помощью phantom.JS.

Вот мой код:

window.setTimeout(function(){
    phantom.exit();
}, 120000);

var page = require('webpage').create();

page.open("http://example.com", function(status) {
    if (status !== 'success') {
        console.log('{"error":"Unable to load the address for page"}');
        phantom.exit();
    }

    var action = page.evaluate(function() {
        document.getElementById("anID").click();
        return "clicked";
    });

    var results = page.evaluate(function() {
        return document.documentElement.innerHTML;
    });

    console.log(action);

    window.setInterval(function() {
        console.log(results);
        phantom.exit();
    }, 3000);
});

Я очень запутан, так как в моей функции" action " вызов click() вызывает эту ошибку, повторенную 3 раза:

TypeError: 'undefined' - это не функция
phantomjs: / / веб-страница.evaluate (): 3 phantomjs: / / webpage.оценить (): 1
ph. js: 121 null

TypeError: 'undefined' - это не функция
phantomjs: / / веб-страница.evaluate (): 3 phantomjs: / / webpage.оценить (): 1
ph. js: 121 null

TypeError: 'undefined' - это не функция
phantomjs: / / веб-страница.evaluate (): 3 phantomjs: / / webpage.оценить (): 1
ph. js: 121 null

Кроме того, если я комментирую строку при отправке щелчка, функция action больше не вызывает ошибку и хорошо возвращает журнал консоли "clicked". Но 3 раза...

Что я такое делать что-то не так ?

Заранее благодарю.

1 3

1 ответ:

Мне наконец удалось выполнить свою задачу с этим кодом. Я пропустил действие щелчка и перешел непосредственно к вызову AJAX:

    // phantomjs test.js 'http://www.example.com' 'anID'

    var system = require('system');
    var page = require('webpage').create();
    var url = system.args[1];
    var target = system.args[2];

    page.onConsoleMessage = function (msg) { 
        console.log(msg); 
        phantom.exit();
    };

    page.open(url, function (status) {
            function evaluate(page, func) {
                var args = [].slice.call(arguments, 2);
                var fn = "function() { return (" + func.toString() + ").apply(this, " + JSON.stringify(args) + ");}";
                return page.evaluate(fn);
            }
            page.injectJs('jquery-1.7.2.min.js');
            if (status === 'success') {
                    evaluate(page, function(target) {
                        $.ajax({
                          type: 'POST',
                          url: document.URL,
                          data: "__EVENTTARGET=" + target,
                          success: function(msg){
                                console.log(msg);
                            }
                        });
            }, target);
        }
    });