2012-04-11 9 views
3

Ich bin neu mit phantom.js und ich versuche, auf einer Website-Seite zu navigieren, auf einen Link (der eine AJAX-Funktion aufruft und ändert die Dokument HTML) mit phantom.js.Klicken Sie auf einen Link mit phantom.js und rufen Sie das Dokument html

Hier ist mein Code:

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

Ich bin sehr verwirrend wie in meiner "action" Funktion ist die Taste() Aufruf, dass Fehler 3 mal wiederholt Anhebung:

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

Auch , Wenn ich die Zeile kommentiere, wenn ich einen Klick sende, löst die Aktionsfunktion keinen Fehler mehr aus und gibt das "angeklickte" Konsolenprotokoll zurück. Aber 3 mal ...

Was mache ich falsch?

Vielen Dank im Voraus.

+2

FYI Sie haben 2 Semikolons nach dieser Zeile:. 'Document.getElementById („ANID“) klicken() ;;' –

+0

Ja Dank es ist ein Fehler beim Posten, Problem immer noch da. – ronnieonrails

Antwort

4

Ich habe es endlich geschafft, meine Aufgabe mit diesem Code zu erfüllen. Ich übersprang die Klick-Aktion und ging direkt auf die AJAX-Aufruf:

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