Effettuare il login al forum a livello di codice e quindi raschiare lo schermo
-
08-07-2019 - |
Domanda
Vorrei accedere alla parte Forum del community-server (ad es. http://forums.timesnapper.com/login.aspx?ReturnUrl=/forums/default.aspx ) e quindi scaricare una pagina specifica ed eseguire una regex (per vedere se ci sono messaggi in attesa per moderazione). In caso affermativo, vorrei inviare un'e-mail.
Mi piacerebbe farlo da un server Linux.
Attualmente so come scaricare una pagina (usando ad esempio wget) ma ho problemi di accesso. Qualche idea brillante su come funziona?
Soluzione
Guardando l'origine della pagina di accesso sembra essere un'app asp.net quindi probabilmente dovrai fare un paio di cose per raggiungere questo obiettivo
Gestisci il campo nascosto __viewstate e pubblicalo di nuovo quando invii i dettagli di accesso.
Una volta superato questo suppongo che puoi fare riferimento alla pagina specifica in questione utilizzando solo un URL assoluto ma dovrai gestire il cookie di autenticazione dei moduli ASP.NET e inviarlo come parte della richiesta GET.
Altri suggerimenti
Potresti avere più fortuna con il selenio o vedere questa domanda per ulteriori suggerimenti:
Personalmente, lo scriverei in Perl, usando WWW :: Mechanize e fai qualcosa del tipo:
my $login_url = 'login url here';
my $username = 'username';
my $password = 'password';
my $mech = new WWW::Mechanize;
$mech->get($login_url)
or die "Failed to fetch login page";
$mech->set_visible($username, $password)
or die "Failed to find fields to complete";
$mech->submit
or die "Failed to submit form";
if ($mech->content() =~ /posts awaiting moderation/i) {
# Do something here
}
Non ho idea se quanto sopra funzionerà, poiché non ho i dettagli di accesso a un server della comunità (qualunque cosa sia) per testarlo, ma dovrebbe darti qualcosa su cui potresti lavorare abbastanza facilmente, e mostra la potenza di WWW :: Mechanize.
Puoi fare tutto con wget. È necessario inviare il modulo tramite POST e memorizzare i cookie. Materiale pertinente dalla pagina man di wget:
--post-data=string
--post-file=file
Use POST as the method for all HTTP requests and send the specified data in the request body.
"--post-data" sends string as data, whereas "--post-file" sends the contents of file. Other than
that, they work in exactly the same way.
This example shows how to log to a server using POST and then proceed to download the desired pages,
presumably only accessible to authorized users:
# Log in to the server. This can be done only once.
wget --save-cookies cookies.txt \
--post-data 'user=foo&password=bar' \
http://server.com/auth.php
# Now grab the page or pages we care about.
wget --load-cookies cookies.txt \
-p http://server.com/interesting/article.php