Automatizzare le richieste Web usando il ricciolo?


13

Ho alcuni sistemi "corporativi" che devo usare al lavoro. Alcuni sono terribili, con cornici, pop-up e simili.

Stavo pensando di automatizzare alcune cose usando il ricciolo o qualcosa del genere. Ho bisogno di accedere, fare clic sui collegamenti ipertestuali, impostare alcuni dati e loro fanno alcuni post.

È possibile usare l'arricciatura? O starò meglio usando qualcosa come il selenio?


1
Vorrei usare zope.testbrowser di Python per questo.
phunehehe,

2
Devi essere in grado di usare Javascript?
intuito il


2
L'uso di una sessione è solo l'invio dell'ID sessione con ogni richiesta. In un cookie o nel parametro GET. wgete curlpuò utilizzare il file cookie di Netscape, quindi se anche il tuo browser utilizza tale file, potrebbe essere sufficiente specificarlo al downloader. Quindi, che tipo di browser stai usando?
arte

2
Nessuna fortuna per una soluzione semplice con quelli. Firefox e Chrome utilizzano SQLite, Opera ha un formato di file di dati binari. Sembra che dovrai cercare l'id di sessione e passarlo manualmente al downloader.
arte

Risposte:


13

Sì, è completamente possibile con l'arricciatura. Ancora più importante sarà salvare e ricaricare i cookie tra gli usi di arricciatura --cookie-jar. È inoltre possibile pubblicare i dati del modulo, se necessario. Di solito utilizzo un componente aggiuntivo di Firefox chiamato Live HTTP Header per catturare ciò che accade quando navigo in un sito Web. Registra tutte le intestazioni, ma anche tutti i post dei moduli che sono molto utili quando si cerca di capire cosa fare con l'arricciatura. Ho scritto script bash automatizzando varie invocazioni di curl e usando pipe e file temporanei (per gentile concessione di mktemp) per eseguire alcune elaborazioni limitate sulla pagina Web, ma se devo fare molte elaborazioni di pagine Web di solito passo a Perl con LibWWW.


Oltre alle intestazioni HTTP Live di Firefox, sia Safari che Chrome possono visualizzare le intestazioni suddivise per oggetto in Web Inspector.
bahamat,

15

Per semplici casi di download dei contenuti di una pagina, utilizzare curl o wget . Entrambi sono strumenti da riga di comando progettati per scaricare file su HTTP e hanno molte opzioni. Nel tuo caso, probabilmente dovrai rendere questi strumenti più simili a un browser; La risposta di lutzky e la risposta di penguin359 menzionano alcune opzioni di arricciatura e wget che sono utili al riguardo.

A volte, quando è necessario accedere , è molto più semplice accedere prima manualmente in un browser Web, quindi esportare i cookie del browser Web (possono essere utili estensioni come allcookies o Export Cookies per Firefox).

Se devi analizzare il contenuto di alcune pagine o moduli di post , potresti aver bisogno di strumenti più elaborati di curl e wget. Alcuni buoni strumenti ci sono Perl con LWP(libwww) e HTML::TreeBuilder(HTML-Tree) o Python con librerie standard (specialmente httplibehtmllib ).

Per interazioni più complesse con un sito Web, il riferimento è il WWW :: Mechanize di Perl . Questa libreria Perl definisce funzioni di alto livello per interagire con un sito Web come fa un browser Web, inclusi POST, moduli, cookie, ma non Javascript. Se Perl non è la tua tazza di tè, questa libreria ha imitazioni con capacità simili in altre lingue, come Python meccanizza e Ruby Mechanize .

Infine, quando hai bisogno di Javascript , l'approccio abituale è quello di utilizzare un browser web che è guidato da un framework di automazione del browser. Selenio e Watir sono scelte popolari; vedi anche Esistono buoni strumenti oltre a SeleniumRC in grado di recuperare pagine Web tra cui contenuti post-dipinti da JavaScript?


6

Il mio preferito è wget, quindi farò un esempio con quello. Quello che vuoi fare è replicare la sessione del browser il più vicino possibile, quindi usa gli argomenti pertinenti della riga di comando. Quelli che sono necessari dipendono da quanto accuratamente il sito controlla il tuo browser. --referer(sic) di solito è sufficiente, ma potresti anche aver bisogno --user-agente --load-cookies.

Questa tecnica è fondamentalmente lo spoofing del browser: stai cercando wgetdi presentarti al sito come browser. Il problema più grande che dovrai affrontare è CAPTCHA, che non è presente nel sito di esempio che hai fornito. Inoltre, assicurati di rispettare le politiche di tempistica del sito (45 secondi in questo caso), o probabilmente verrai bloccato.

Probabilmente non è possibile scaricare lo stesso file in sessioni diverse: il sito concede il download di privilegi sul file specifico in una sessione specifica.


Buona risposta con considerazioni complete. Grazie
xiaohan2012 il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.