2016-09-11 1 views
1
klickt

Es gibt einen Knopf auf einer Web site am Ende eines Formulars, das ich nicht scheinen kann, mit WWW :: Mechanize anzuklicken. Hier wird das Bit von HTML in Bezug auf diese Schaltfläche:WWW :: Mechanize: Wie man Knopf auf seiner Zahl in Form

<input type="submit" class="saveButton" value="Login"> 

Als ich print $mech->find_all_inputs();, bekomme ich diese zurück:

HTML::Form::TextInput=HASH(0x7f8f52cdc450) 
HTML::Form::TextInput=HASH(0x7f8f5302b488) 
HTML::Form::SubmitInput=HASH(0x7f8f52cdc108) 

Die dritte ist die, die ich klicken möchten. Ich weiß nicht genau, wie ich auf diesen Knopf klicken soll, obwohl ich ihn gefunden habe. Ich habe versucht, click(field(n => 3)), ich habe versucht, eine Variable $ senden an find_all_inputs(3), dann click($submit);, und egal was, diese Schaltfläche ist nicht angeklickt.

Kann mir jemand erklären, wie man auf diesen schwer fassbaren Knopf klickt? ‚Habe mein Passwort‘ Feld des Formulars

bearbeiten (nach Frage beantwortet)

das HTML-Formular abfragen fand ich eigentlich war das Passwort für den Login in der Eingabe. Warum dieses Feld nicht für $mech->find_all_inputs() aufkam, weiß ich seit "Login" nicht mehr. In jedem Fall bringt mich der Klick auf die Schaltfläche zur nächsten Seite. Vielen Dank!

+0

Es scheint, dass 'Klick' funktioniert, aber ich gehe nicht auf die nächste Seite (die Taste in Frage ist eine Login-Taste, so klicken Sie auf eine andere URL, richtig? Aber '$ ua -> uri;' ist das gleiche vor und nach dem Klicken auf den Button). Ich versuchte 'my $ response = $ ua -> click();' und 'print $ response', was' HTML :: Form :: SubmitInput = HASH (0x7f8f52cdc108) 'zurückgab, weshalb ich denke,' click' funktioniert. –

+0

Hat Ihr Mechanize-Objekt Cookies? in Erwägung ziehen, 'my $ mech = WWW :: Mechanize-> neu ( cookie_jar => HTTP :: Cookies-> neu (Datei =>" $ ENV {HOME} /. Cookies.txt ") );' um Kekse zu bekommen. Es scheint sehr unwahrscheinlich, dass Sie sich ohne einloggen könnten. – bytepusher

+0

@bytepusher: Der 'WWW :: Mechanize'-Konstruktor verhält sich standardmäßig so, als ob Sie die Option' cookie_jar => {} 'übergeben hätten, die ein speicherinternes' HTTP :: Cookies'-Objekt erzeugt. – Borodin

Antwort

1

Haben Sie zuerst versucht, das entsprechende Formular auszuwählen, rufen Sie dann click an? Er sagt (Hervorhebung von mir)

hat die Wirkung der eine Taste auf der aktuellen Form klicken.

Finden Sie das Formular auf der Seite, die Sie benötigen. Sagen wir, es ist Form Nummer 2.

# $ua is the User Agent (Mechanize object), at the appropriate page 
$ua->form_number(2); 
# fill the form ... 
my $response = $ua->click(); 

oder

$ua->submit_form( 
    form_number => 2, 
    # fields => { name => $value } # can fill it here as well 
}; 

ich click finden vielleicht zuverlässiger insgesamt zu sein.

Um die Formulare zu überprüfen, können Sie my @forms = $ua->forms verwenden. Um das Formular auszufüllen, können Sie beispielsweise select oder set_fields verwenden. Siehe Form Methods und Field Methods. All dies funktioniert mit HTML::Form Objekte, so dass Sie seine Methoden auch verwenden können. Zum Beispiel sind value_names und possible_values praktisch.

Wenn das nicht hilft bitte geben Sie uns mehr Details - die betreffende Webseite wäre ideal.

+0

Klicken scheint zu funktionieren, aber die Aktion, die der Klick hätte tun sollen, hat nicht. Wenn ich den HTML-Code überprüfe, sehe ich, dass, wenn ich die Zeile von meiner Frage übergebe, am Ende ein "= $ 0" steht: ' = $ 0'. Vielleicht hilft das? Ich habe nicht wirklich mit HTML in der Vergangenheit gearbeitet –

+0

@AdityaJ. Diese neue Info hilft ein wenig. Behandeln Sie zunächst per bytepusher (http://stackoverflow.com/users/4204037/bytepusher) Cookies. Weiter, gibt es mehr in diesem Formular mit "Login" -Button? Wie machen Sie das, wenn Sie manuell auf die Seite gehen - müssen Sie andere Felder ausfüllen oder gibt es nur die Schaltfläche "Login"? Achten Sie auch darauf, wie viele Formulare es gibt (nach $ ua-> forms), so dass Sie 'form_number' für das richtige Formular verwenden. Schließlich erhalten Sie das 'HTML :: Form'-Objekt zurück - Sie können das mit seinen Methoden abfragen. Oder entpacke die Hashref. – zdim

+0

Ich bin bereits in der Lage, die Felder Benutzername und Passwort, die die einzigen Felder neben Login sind im Formular –

3

Da es die erste Taste in der Form ist, können Sie schreiben diese

$mech->click_button(n => 1) 

oder, da es value Attribut ist, ist Login, können Sie dies tun

$mech->click_button(value => 'Login') 

Aber da es sich um die nur Knopf im Formular, nur

$mech->click 

sollte funktioniert gut

Verwandte Themen