2016-06-30 4 views
1

Ich habe eine Anwendung mit der folgenden Struktur.PhantomJS Navigation Seiten und komplette Vollbild-Flow

login.html >>> page1.html >>> page2.html

Sie können nicht auf page2.html erhalten, ohne die vorherigen Seiten abgeschlossen ist. Jetzt weiß ich, dass ich über sie in die falsche Richtung gehe, weil ich stecken bin

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

page.onConsoleMessage = function(msg) { 
    system.stderr.writeLine('console: ' + msg); 
}; 

function open_login(){ 
    login_page('https://test.com/login.html'); 
} 

function login_page(file){ 
    page.open(file,function(){ 

     page.evaluate(function(){ 
     var user = document.querySelector('#username'); 
     var password = document.querySelector('#password'); 
     var submit = document.querySelector('#submit'); 
     user.value = 'user1'; 
     password.value = 'pwd1'; 
     submit.click(); 
     }); 

     // What now? How do I ensure that the page1.html has loaded so that i can get more elements, their values and submit to proceed to page2.html 

     page.render("login.png"); 
     window.setTimeout(function() { 
      page.render("login.png"); 
      phantom.exit(); 
     }, 5000); 
    }); 
} 

open_login(); 

Mein Problem ist jetzt, dass ich keine Ahnung, was als nächstes zu tun, wird es in richtig einzuloggen aber wie lese ich mit JavaScript, dass die click Event hat page1.html erfolgreich geladen? Ich kann jquery nicht benutzen und ich kann casperjs dafür nicht benutzen. Muss phantomjs sein.

Antwort

0

Es gibt eine Callback-Funktion page.onLoadFinished, die jedes Mal ausgelöst wird, wenn eine Seite vollständig geladen wurde. Sie können nach der aktuellen URL innerhalb dieses Callbacks suchen und die entsprechenden Dinge tun.

page.onLoadFinished = function(result) { 

    var current_url = page.evaluate(function(){ 
     return window.location.href; 
    }); 

    if(result == "fail") { 
     console.log("Couldn't load " + current_url); 
     phantom.exit(1); 
    } 

    if(current_url.indexOf("page1.html") !== -1){ 
     do_stuff(); 
    } 
    else if(current_url.indexOf("page2.html") !== -1){ 
     do_other_stuff(); 
    } 
} 
+0

Danke! Ich werde es ausprobieren und sehen. – codeCompiler77

+0

Nun, wie ist es gelaufen? – Vaviloff

+0

Ich konnte es nicht zur Arbeit bringen, es wusste nicht, dass die Seite geladen wurde und dachte immer noch, dass es auf der Originalseite war. – codeCompiler77