Нажмите на ссылку с 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 nullTypeError: 'undefined' - это не функция
phantomjs: / / веб-страница.evaluate (): 3 phantomjs: / / webpage.оценить (): 1
ph. js: 121 nullTypeError: 'undefined' - это не функция
phantomjs: / / веб-страница.evaluate (): 3 phantomjs: / / webpage.оценить (): 1
ph. js: 121 null
Кроме того, если я комментирую строку при отправке щелчка, функция action больше не вызывает ошибку и хорошо возвращает журнал консоли "clicked". Но 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); } });