2015-02-13 3 views
6

Ich lerne PhantomJS kennen. Aber ich kann nichts bekommen. Ich habe eine Seite mit einer einfachen Form:Wie schicke ich ein Formular mit PhantomJS?

<FORM action="save.php" enctype="multipart/form-data" method="GET" onSubmit="return doSubmit();"> 
    <INPUT name="test_data" type="text"> 
    <INPUT name="Submit" type="submit" value="Submit"> 
</FORM> 

und save.php schreibt nur auf der test_data Wert

so das ich tue:

page.evaluate(function() { 
    document.forms[0].test_data.value="555"; 
    doSubmit(); 
}); 

Wenn die Seite, die ich Rendering Beachten Sie, dass das Textfeld 555 ist, das Formular jedoch nicht übermittelt wird und save.php den Wert test_data nicht aufgeschrieben hat. Also doSubmit() wird nicht ausgeführt, oder? doSubmit() ist ein einfacher Validierungsschritt und ein Submit soll die nächste Seite laden.

Also die Frage ist: Wie kann ich einen Javascript-Code auf der Seite ausführen, mit PhantomJS?

+0

'Funktion doSubmit() { \t \t \t if (document.forms [0] .test_data.value == "") \t {\t \t \t Warnung ("Füllen Sie das Feld!"); \t \t Rückgabe false; \t} \t \t Rückkehr wahr; } 'Hier ist es, tut mir leid, ich habe vergessen, es in meiner Frage zu veröffentlichen. Es macht nur die Validierung. – user3416803

+0

Oh, ich sehe jetzt. Also muss ich nur über JS auf den Submit-Button klicken? Sowieso. Wenn ich die Funktion ausführen muss, wird es auf diese Weise funktionieren oder gibt es einen anderen Ansatz? Tut mir leid, dass ich lahm bin. – user3416803

+1

Mögliches Duplikat von [So senden Sie ein Formular mit PhantomJS] (http://stackoverflow.com/questions/9246438/how-to-submit-a-form-using-phantomjs) –

Antwort

9

Es scheint, dass Sie das Formular senden möchten. Sie können das auf verschiedene Weise erreichen, wie

Danach müssen Sie warten, bis die nächste Seite geladen ist. Dies geschieht am besten durch die Registrierung page.onLoadFinished (die dann Ihr verbleibendes Skript enthält) direkt vor dem Absenden des Formulars.

page.open(url, function(){ 
    page.onLoadFinished = function(){ 
     page.render("nextPage.png"); 
     phantom.exit(); 
    }; 
    page.evaluate(function() { 
     document.forms[0].test_data.value="555"; 
     document.forms[0].submit(); 
    }); 
}); 

oder Sie können einfach warten:

page.open(url, function(){ 
    page.evaluate(function() { 
     document.forms[0].test_data.value="555"; 
     document.forms[0].submit(); 
    }); 
    setTimeout(function(){ 
     page.render("nextPage.png"); 
     phantom.exit(); 
    }, 5000); // 5 seconds 
}); 
+0

Es ist seltsam, aber wie ich das einfachste sehe Methode ist document.forms [0] .submit(); aber es funktioniert nicht. – user3416803

+0

Nein, ich benutze 2.0.0, scheint der letzte zu sein. Vielleicht ist das Problem woanders? – user3416803

+0

registrieren Sie bitte die [ 'onConsoleMessage'] (http://phantomjs.org/api/webpage/handler/on-console-message.html), [' onError'] (http://phantomjs.org/api/ webpage/handler/on-error.html), ['onResourceError'] (http://phantomjs.org/api/webpage/handler/on-resource-error.html), [' onResourceTimeout'] (http: // phantomjs.org/api/webpage/handler/on-resource-timeout.html) Ereignisse. Vielleicht gibt es Fehler. –