phantomjs
2013-05-22 2 views 10 likes 
10

Ich kann nicht scheinen, um ein einfaches Formular zu senden.Phantomjs - Wie man ein Formular füllt, einreicht und die Ergebnisse bekommt?

Unten ist der Code, den ich gemacht habe, um "Test" an das Google-Suchformular zu senden und die Ergebnisse auszudrucken.

var url = 'http://www.google.com/', 
    page = new WebPage(); 

page.open(url, function(status) { 
    if (status !== 'success') 
    { 
     console.log('Unable to access network'); 
     phantom.exit(); 
     return; 
    } 
    else 
    { 
     page.includeJs("//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js", function() { 
      page.evaluate(function() { 
       $('#gbqfq').val("Test"); 

       $("#gbqfba").click(); 

      }); 

      page.render('google.png'); 
      phantom.exit(); 
     }); 
    } 
}); 

Jeder kann mir zeigen, wie das geht? Ich habe mich hier und in anderen Orten umgesehen, aber nichts schien zu funktionieren.

+0

Für die Aufzeichnung sollten Sie diese Antwort wirklich berücksichtigen http://stackoverflow.com/a/9256079/649687 – JMax

Antwort

5

Es reicht nicht aus, eine Seite sofort nach dem "Klicken" zu rendern. Sie müssen der Web-Engine Zeit geben, um alle erforderlichen Aufrufe auszuführen und das resultierende JavaScript auszuführen.

Betrachten Sie die folgende nach Ihrem Anruf zu bewerten:

window.setTimeout(
    function() { 
    page.render('google.png'); 
    phantom.exit(0); 
    }, 
    5000 // wait 5,000ms (5s) 
); 

By the way - der Klick abhängig arbeiten kann oder nicht auf welche Art von Element ist. Wenn das nicht funktioniert, schlage ich vor, dass Sie im Internet suchen, wie Sie auf ein DIV oder einen anderen Elementtyp klicken (es gibt eine Technik, bei der ein Mausereignis erstellt wird).

Verwandte Themen