2017-11-03 3 views
1

Ich habe das FormularWie diese Form durch perl einreichen für Openwrt/LEDE

<form method="post" action="index.lp" name="authform" id="authform"> 
<input type="password" name="password" id="password" onkeypress="return enter_submit(event);" /> 
<input name="enter" class="btn btn-primary" type="button" value="log in" onclick='auth()' /> 

Ich kann es dank einreichen javascript auf diese Weise

javascript:document.getElementById("password").value = "password";auth(); 

Jetzt muss ich Perl-Skript schreiben, es zu tun automatisch und wenn es sich einloggen, führen Sie eine andere JavaScript-Funktion auf der Seite aus. Ich teste es am Computer und habe ein Problem:

1) Perl brauche einen c-Compiler ... nachdem ich es auf openwrt installieren kann?

2) Ich kann 2 verschiedene Möglichkeiten versuchen:

Die erste und schneller ist WWW zu nutzen :: Autor :: Plugin :: JavaScript, aber ich kann das Modul nicht installieren, weil ich nicht mingw installieren kann (i Habe in ppm-shell mingw installiert und es kommt zurück "ppm install failed: Kann kein Paket finden, das mingw bereitstellt"). Außerdem sehe ich WWW :: Scripter in Perl package nicht. Ich schrieb das Skript (kann es funktionieren?):

use WWW::Scripter; 
    $w = new WWW::Scripter; 

    $w->use_plugin('JavaScript'); 
    $w->get('http://url'); 
    $w->get('javascript:document.getElementById("password").value = "password";auth();'); 
    sleep (1); 
    $w->get('http://url'); 
    $w->get('javascript: function();'); 

Der zweite ist WWW zu verwenden: Mechanize. Wie kann ich die Ausgabeseite sehen? Und wie kann ich Befehl an die zweite Seite senden? Jetzt mit diesem Skript erhalte ich diesen Fehler: "Fehlendes Basisargument bei D:/Programme/Perl/lib/HTTP/Response.pm Zeile 92.". (kann es?)

use WWW::Mechanize; 
my $mech = WWW::Mechanize->new(); 

$mech->get($url); 

$mech->follow_link(url => 'http://url'); 

$mech->submit_form(
    form_name => 'authform', 
    fields => { password => 'password', }, 
    button => 'log in' 
); 

Antwort

0

ich mit WWW :: Mechanize arbeiten würde, JS Interpretation, die ohne einen echten Browser-Engine auf dem DOM verlässt sich in der Nähe unmöglich.

$mech->content() erhalten Sie den raw HTML von WWW :: Mechanize zuletzt abgerufene Seite.

Wenn Sie JavaScript-lastige Seiten haben, die Sie automatisieren müssen, und Sie Perl verwenden möchten, schauen Sie in Seleniums WebDriver nach, um einen "echten" Browser zu steuern (selbst wenn er kopflos wie phantomjs ist).

Wie für den Fehler erhalten Sie: Stellen Sie sicher, dass Ihre Schritte ordnungsgemäß funktionieren, und schauen Sie, was in Zeile 92 geschieht und was es erwartet.

+0

Oh, richtig, sorry, habe den OpenWRT vergessen. Mechanize sollte immer noch ohne es arbeiten. Wenn Sie auf JS stoßen, können Sie es einfach fälschen und Mechanize veranlassen, die richtige Anfrage selbst zu senden, ohne JS zu interpretieren (schauen Sie, was Ihr Browser sendet und im Grunde wiederholen). – janh

+0

Ich kann Selen nicht auf Openwrt/LEDE verwenden, weil sie keinen echten Browser haben! Mechanzine sollte Javascript nicht interpretieren, sondern nur ein Formular einreichen (liest du einen Code, den ich gepostet habe?) Stattdessen WWW :: Scripter :: Plugin :: JavaScript kann Javascript interpretieren. Was empfehlen Sie mir zu tun? Sie müssen denken, dass ich auf openwrt/LEDE und nicht auf anderen OS verwenden muss – Squalo

+0

Ich lese Http-Header, aber ich weiß nicht, wie ich darauf antworten soll! Ich denke, es gibt MD5-Verschlüsselung und ich weiß nicht, wie zu tun ist ... Wenn Sie können wir Teamviewer verwenden! In Zeile 92 habe ich 'return $ HTTP :: URI_CLASS-> new_abs ($ base, $ req-> uri);' – Squalo