2016-05-30 3 views
1
var steps=[]; 
var testindex = 0; 
var loadInProgress = false;//This is set to true when a page is still loading 

var webPage = require('webpage'); 
var page = webPage.create(); 
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'; 
page.settings.javascriptEnabled = true; 
page.settings.loadImages = false;//Script is much faster with this field set to false 
phantom.cookiesEnabled = true; 
phantom.javascriptEnabled = true; 

console.log('All settings loaded, start with execution'); 
page.onConsoleMessage = function(msg) { 
    console.log(msg); 
}; 
steps = [ 

    function(){ 
     console.log('Step 1 - Open Fb home page'); 
     page.open("https://www.facebook.com/login.php", function(status){ 

     }); 
    }, 

    function(){ 
     console.log('Step 3 - Populate and submit the login form'); 
     page.evaluate(function(){ 
      document.getElementById("email").value="[email protected]"; 
      document.getElementById("pass").value="xxx"; 
      document.getElementById("login_form").submit(); 
     }); 
    }, 
    function() { 
     page.render('homepage.png'); 
    }, 
    function(){ 
     page.open("https://www.facebook.com/settings", function(status){ 

     }); 
    }, 
    function() { 
     page.render('settings.png'); 
    }, 
]; 

interval = setInterval(executeRequestsStepByStep,50); 

function executeRequestsStepByStep(){ 
    if (loadInProgress == false && typeof steps[testindex] == "function") { 
     //console.log("step " + (testindex + 1)); 
     steps[testindex](); 
     testindex++; 
    } 
    if (typeof steps[testindex] != "function") { 
     console.log("test complete!"); 
     phantom.exit(); 
    } 
} 


page.onLoadStarted = function() { 
    loadInProgress = true; 
    console.log('Loading started'); 
}; 
page.onLoadFinished = function() { 
    loadInProgress = false; 
    console.log('Loading finished'); 
}; 
page.onConsoleMessage = function(msg) { 
    console.log(msg); 
}; 

Wie "https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js" injizieren und verwendetWie injiziere ich jquery (js) in Phantomjs?

$('#email').attr("value", "[email protected]"); 

$('#pass').attr("value", "xxxx"); 

$('#login_form').submit(); 

Ich versuche, alle Methode, aber Skript kann nicht arbeiten.

+0

Ich sehe nicht, wo Sie versucht haben, jQuery in Ihrem Code zu verwenden. Bitte bearbeiten Sie Ihre Frage, um den tatsächlichen Code anzuzeigen. Woher weißt du, dass es nicht funktioniert? Haben Sie auf eine bestimmte Zeit gewartet? Hast du Screenshots gemacht? –

Antwort

1

Sie können includeJs auf Ihrem Seitenobjekt aufrufen, um dies zu tun und Ihre Evaluierungsfunktion innerhalb des Callbacks nach der Injektion mit dem JQuery-Code zu setzen, den Sie ausführen möchten.

Sie müssen auch entfernen Sie den Benutzer-Agent am Anfang des Codes. Seine Präsenz verhindert das Laden des externen JQuery-Javascript. Sie müssen auch die Zeit erhöhen, die Sie an setInterval übergeben. 50 ms reichen nicht aus, um JQuery zu laden, das DOM zu manipulieren und das Formular zu senden. Etwas wie 10 Sekunden klingt praktischer, um auf der sicheren Seite zu sein.

function(){ 
    console.log('Step 3 - Populate and submit the login form'); 
    page.includeJs('https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js', function() { 
     page.evaluate(function(){ 
     $('#email').attr("value", "[email protected]"); 
     $('#pass').attr("value", "xxxx"); 
     $('#login_form').submit(); 
     }); 
    }); 



interval = setInterval(executeRequestsStepByStep, 10000); 
+0

Wenn es 100% funktioniert, weiß ich. Kannst du meinen Code bearbeiten? –

+0

Ich habe gerade die Antwort neu bearbeitet. Ich habe Ihren Code ausgeführt und getestet, nachdem alle oben genannten behoben wurden. Es funktioniert und kann die DOM-Felder manipulieren und senden. Natürlich verhindert Facebook nach dem Senden, dass Sie fortfahren, da Cookies deaktiviert sind. Für den Zweck Ihrer Frage sollte dies jedoch behoben werden. Bitte überarbeiten und akzeptieren Sie die Antwort, wenn es an Ihrem Ende gut ist :) Prost! –