2013-05-22 19 views
10

Nie mogę wykonać prostego formularza.Phantomjs - jak wypełnić formularz, przesłać i uzyskać wyniki?

Poniżej znajduje się kod, który zrobiłem, aby przesłać "Test" do formularza wyszukiwarki Google i wydrukować wyniki.

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

Ktoś może mi pokazać, jak to zrobić? Rozglądałem się tutaj i na innych stronach, ale nic nie działało.

+0

Dla przypomnienia, powinieneś naprawdę wziąć pod uwagę tę odpowiedź http://stackoverflow.com/a/9256079/649687 – JMax

Odpowiedz

5

Nie wystarczy renderować strony natychmiast po "kliknięciu". Musisz dać silnikowi sieci czas na wykonanie żądanych połączeń i wykonanie wynikowego skryptu JavaScript.

Rozważmy następujący po wywołaniu ocena:

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

Nawiasem mówiąc - kliknięcie może lub nie może działać w zależności od rodzaju elementu jest. Jeśli to nie zadziała, sugeruję, abyś przeszukał Internet, aby dowiedzieć się, jak kliknąć DIV, czy jakikolwiek element, jaki się w nim znajduje (jest technika, która wymaga stworzenia zdarzenia myszy).

Powiązane problemy