Domanda

Ho bisogno di automatizzare un processo che coinvolge un sito web che utilizza un modulo di login.Ho bisogno di acquisire alcuni dati nelle pagine seguenti la pagina di login.

Io so come screen-scraping pagine normali, ma non per coloro che dietro un sito sicuro.

  1. Questo può essere fatto con l' .NET classe WebClient?
    • Come faccio il login automatico?
    • Come faccio a mantenere la registrato per le altre pagine?
È stato utile?

Soluzione

Un modo potrebbe essere attraverso l'automatizzazione di un browser -- hai citato WebClient, quindi immagino che si potrebbe essere fa riferimento a WebClient in .NET.

Due punti principali:

  • Non è niente di speciale https relative al WebClient - funziona da solo
  • I cookie sono tipicamente utilizzati per trasportare l'autenticazione-avrete bisogno di acquisizione e riproduzione di loro

Ecco i passi che mi seguono:

  1. OTTENERE il modulo di accesso, di acquisizione i cookie nella risposta.
  2. Utilizzando Xpath e HtmlAgilityPack, trovare il "input type=hidden" nomi di campo e di valori.
  3. POST login form azione con nome utente, la password e il campo nascosto valori nel corpo della richiesta.Includere i cookie nelle intestazioni di richiesta.Di nuovo, la cattura di cookie per la risposta.
  4. OTTENERE le pagine che si desidera, di nuovo, con il cookie nelle intestazioni di richiesta.

Sul punto 2, ho detto un po ' complicato metodo per automatizzare il login.Di solito, si può postare con nome utente e password direttamente il modulo di login di azione senza ottenere la forma iniziale o di stabulazione i campi nascosti.Alcuni siti hanno la convalida del modulo (diverso dal campo di convalida) sulle loro forme, che rende questo metodo non funziona.

HtmlAgilityPack è un .Libreria di rete che permette di trasformare il mal formato html in un XmlDocument così si può XPath su di esso.Molto utile.

Infine, si può incorrere in una situazione in cui il modulo si basa su script client per modificare i valori del form prima di inviare.Potrebbe essere necessario simulare questo comportamento.

Utilizzando uno strumento per visualizzare il traffico http per questo tipo di lavoro è estremamente utile, mi raccomando ieHttpHeaders, Fiddler, o FireBug (al netto della scheda).

Altri suggerimenti

Si può facilmente simulare l'input dell'utente.È possibile inviare il modulo nella pagina web da te programma, inviando post ichiesta get per un sito web.
Tipico modulo di login si presenta come:

<form name="loginForm" method="post" Action="target_page.html">
   <input type="Text" name="Username">
   <input type="Password" name="Password">
</form>

È possibile inviare una richiesta post per il sito web che fornisce valori di Username e Password nei campi.Cosa succede dopo aver inviato la tua richiesta è in gran parte dipende da un sito web, di solito, si verrà reindirizzati ad alcune pagine.Si autorizzazione le informazioni vengono immagazzinate in sessioni\cookie.Quindi, se si raschiare il client è in grado di mantenere la sessione web\capisce i cookie, si sarà in grado di accedere a pagine protette.

Non è chiaro dalla tua domanda che lingua\framework hai intenzione di utilizzare.Per esempio c'è un quadro di screen scraping (comprese le funzionalità di login) scritto in perl - WWW::Mechanize

Si noti che non si possono affrontare alcuni problemi se il sito si sta cercando di login per gli usi java script o un qualche tipo di CAPTCHA.

Potete chiarire?È la classe WebClient si parla di quello in HTTPUnit/Java?

Se è così, la tua sessione dovrebbe essere salvati automaticamente.

Non è chiaro dalla tua domanda che classe WebClient (o lingua) si fa riferimento.

Se si dispone di un Java Runtime è possibile utilizzare la classe HttpClient di Apache;ecco un esempio che ho scritto usando Groovy che accede al delizioso API su SSL:

   def client = new HttpClient()

   def credentials = new UsernamePasswordCredentials( "username", "password" )
   def authScope = new AuthScope("api.del.icio.us", 443, AuthScope.ANY_REALM)
   client.getState().setCredentials( authScope, credentials )

   def url = "https://api.del.icio.us/v1/posts/get"

   def method = new PostMethod( url )
   method.addParameter( "tag", tag )
   client.executeMethod( method )
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top