2015-02-13 18 views
6

Sto familiarizzando con PhantomJS. Ma non riesco a ottenere una cosa. Ho una pagina con una semplice forma:Come inviare un modulo con 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> 

e save.php appena annota il valore test_data

così sto facendo questo:

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

Quando il rendering della pagina I vedi che il campo di testo è 555, ma il modulo non sta sottomettendo e save.php non ha annotato un valore di test_data. Quindi doSubmit() non è in esecuzione, vero? doSubmit() è un semplice passo di convalida e un invio dovrebbe caricare la pagina successiva.

Quindi la domanda è: come posso eseguire un codice javascript sulla pagina, utilizzando PhantomJS?

+0

'funzione doSubmit() { \t \t \t se (document.forms [0] .test_data.value == "") \t {\t \t avviso \t ("Riempi il campo!"); \t \t return false; \t} \t \t return true; } 'Eccolo, mi dispiace ho dimenticato di postarlo nella mia domanda. Sta solo facendo la convalida. – user3416803

+0

Oh, ora capisco. Quindi ho solo bisogno di fare clic sul pulsante di invio tramite JS? Comunque. Se ho bisogno di eseguire la funzione, funzionerà in questo modo o c'è un altro approccio? Scusa per essere zoppo. – user3416803

+1

Possibile duplicato di [Come inviare un modulo utilizzando PhantomJS] (http://stackoverflow.com/questions/9246438/how-to-submit-a-form-using-phantomjs) –

risposta

9

Sembra che si desidera inviare il modulo. È possibile ottenere che, in modi diversi, come

Dopodiché dovrai attendere fino al caricamento della pagina successiva. È meglio farlo registrando page.onLoadFinished (che quindi contiene lo script rimanente) proprio prima di inviare il modulo.

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

o si può semplicemente aspettare:

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

È strano, ma come vedo il più semplice metodo è document.forms [0] .submit(); ma non funziona. – user3416803

+0

No, sto usando 2.0.0, sembra essere l'ultimo. Forse il problema è altrove? – user3416803

+0

Si prega di registrarsi al ['onConsoleMessage'] (http://phantomjs.org/api/webpage/handler/on-console-message.html), [' onError'] (http://phantomjs.org/api/ pagina web/gestore/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) eventi. Forse ci sono errori. –