2012-04-11 2 views
3

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

Вот мой код:

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); 
}); 

Я очень запутано, как в моей функции "действия", вызов нажмите() является повышение повторил, что ошибка в 3 раза:

TypeError: 'undefined' is not a function
phantomjs://webpage.evaluate():3 phantomjs://webpage.evaluate():1
ph.js:121 null

TypeError: 'undefined' is not a function
phantomjs://webpage.evaluate():3 phantomjs://webpage.evaluate():1
ph.js:121 null

TypeError: 'undefined' is not a function
phantomjs://webpage.evaluate():3 phantomjs://webpage.evaluate():1
ph.js:121 null

Также , если я прокомментирую строку, когда я посылаю клик, функция действия больше не вызывает ошибку и хорошо возвращает «клик» на консольный журнал. Но 3 раза ...

Что я делаю неправильно?

Заранее спасибо.

+2

FYI у вас есть 2 точки с запятой после этой строки:. 'Document.getElementById («ANID») нажмите() ;;' –

+0

Да спасибо это ошибка при отправке здесь, проблема все еще там. – ronnieonrails

ответ

4

Мне, наконец, удалось выполнить мою задачу с помощью этого кода. Я пропустил это действие щелчка и пошел прямо на вызов 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); 
     } 
    }); 
Смежные вопросы