2010-04-29 11 views
5

Sto tentando di utilizzare Perl's WWW::Mechanize per accedere alla mia banca e ottenere informazioni sulla transazione. Dopo aver effettuato l'accesso tramite un browser alla mia banca (Wells Fargo), visualizza brevemente una pagina web temporanea che dice qualcosa del tipo "per favore aspetta mentre verifichiamo la tua identità". Dopo pochi secondi, passa alla pagina web della banca dove posso ottenere i miei dati bancari. L'unica differenza è che l'URL contiene molti più parametri "GET" aggiunti all'URL della pagina temporanea, che aveva solo un parametro sessionID.Come posso far accedere WWW-Mechanize al sito web di Wells Fargo?

Sono riuscito a ottenere correttamente WWW :: Mechanize per accedere dalla pagina di accesso, ma si blocca sulla pagina temporanea. C'è un tag <meta http-equiv="Refresh" ... nell'intestazione, quindi ho provato a $mech->follow_meta_redirect ma non mi ha superato nemmeno quella pagina temporanea.

Qualsiasi aiuto per superare questo sarebbe apprezzato. Grazie in anticipo.

Ecco il codice barebone che mi viene bloccato a pagina temporanea:

#!/usr/bin/perl -w 
use strict; 
use WWW::Mechanize; 

my $mech = WWW::Mechanize->new(); 
$mech->agent_alias('Linux Mozilla'); 

$mech->get("https://www.wellsfargo.com"); 
$mech->submit_form(
    form_number => 2, 
    fields => { 
     userid => "$userid", 
     password => "$password" 
    }, 
    button => "btnSignon" 
); 

risposta

2

Avrai bisogno di decodificare quello che sta succedendo in quella pagina intermediario. Ad esempio, utilizza Javascript per impostare alcuni cookie? Mech non analizzerà né eseguirà Javascript su una pagina, quindi potrebbe provare a seguire il meta-refresh ma mancano alcune informazioni cruciali su ciò che deve accadere per la richiesta finale.

Provare a utilizzare uno strumento come Firebug per visualizzare la richiesta inviata quando il browser segue il meta-aggiornamento. Esamina tutte le intestazioni delle richieste, inclusi i cookie, che vengono inviate per richiedere la pagina finale. Quindi usa Mech per duplicarlo.

+0

Grazie per il puntatore a Firebug. L'ho installato e ho notato che c'è una riga < 'nella pagina intermedia che fa riferimento a una funzione javascript. Immagino di essere sfortunato dal momento che Mech non può trattare con javascript a questo punto. –

+1

Potresti non essere sfortunato, devi solo scoprire cosa stanno facendo quelle funzioni Javascript e fare in modo che Mech faccia la stessa cosa. Usa Firebug per osservare la transazione HTTP: ci sono campi o cookie POST che non hai mai visto prima? Probabilmente il JS li ha aggiunti, quindi aggiungi le stesse cose con il Mech. – friedo

1

Se si conosce la posizione della pagina successiva si può provare a ottenerlo dopo aver attaccato i parametri GET aggiuntivi utilizzando

$mech->add_header($name => $value); 
+0

Questo aggiungerà un'intestazione di richiesta, ma non aggiungerà campi all'URI o al contenuto POST della richiesta. –

3

Ci dispiace, è stato anni da quando ho codificato Perl. Tuttavia, dal momento che non c'è "copia e incolla" rispondere postato ancora per questa domanda, ecco come fare per raschiare Wells Fargo in Ruby:

require 'rubygems' 
require 'mechanize' 

username = 'your_username' 
password = 'your_password' 

agent = Mechanize.new 
agent.user_agent_alias = 'Windows IE 6' 

# get first page 
page = agent.get('https://online.wellsfargo.com/signon/') 

# find and fill form 
form = page.form_with(:name => 'Signon')  
form['userid'] = username 
form['password'] = password 
page = agent.submit form 

# find the refresh url 
page.body.match /content="1;URL=(.*?)"/ 
nexturl = $1 

# wait a little while and then get the next page 
sleep 3 
page = agent.get nexturl 

# If you have multiple accounts, you can use this. If you just have a single account, you can remove this block 
companies = [['Account1', '123456789'], 
      ['Account2', '123456789']] 

companies.each do |name, id| 
    form = page.form_with(:name => 'ChangeViewFormBean') 
    form['viewKey'] = id 
    page = agent.submit form 

    available_balance = page.search("#cashTotalAvailBalance").text.strip 

    puts "#{name}: #{available_balance}" 
    sleep 2 
end 

opere citate: C'è un ragazzo che ha scritto una versione di questo script, postato a la sua directory di codice e poi l'ha inoltrata al suo blog. Il suo cognome è Youngblood o simile. Ho trovato la fonte nell'archivio Internet/macchina di ritorno e l'ho modificata per rendere quello che vedi sopra. Quindi, grazie a Mr. Youngblood o simili, ovunque tu sia - e grazie per avermi insegnato il trucco del meta-raschio!

1

Prima di tutto bisogna sapere è questo Javascript o no: vi consiglio di usare Web Developer (ma si può usare NoScript troppo) per disabilitare Javascript e cercare di accedere via browser (ma prima è necessario cancellare tutti i cookie relativi al vostro sito target!).

Se ancora (con Javascript disattivato) possono effettuare il login di questo non è problema Javascript e avete bisogno di indagare intestazioni HTTP (può essere coordinate x, y del pulsante cliccato per esempio o dei biscotti ricevuto solo quando carichi file CSS ecc.).

Si consiglia di utilizzare HttpFox per controllare le intestazioni HTTP. È necessario eseguire la registrazione HttpFox e successivamente eseguire nuovamente il login (a proposito, disabilitare le immagini prima di fare ciò ridurrà significativamente il registro).Dopodiché è necessario controllare ogni richiesta e risposta corrispondente per trovare dove sono stati settati i cookie nascosti o creato un qualche modulo nascosto.

Se non è possibile effettuare il login dopo aver disabilitato Javascript, è necessario controllare anche le intestazioni. È necessario confrontare i cookie forniti nella risposta dell'intestazione HTTP con i cookie che hai nella richiesta successiva. Dopo aver trovato html con Javascript "malevolo" puoi analizzare questo Javascript per trovare l'algoritmo di come questo cookie (o form param) ha creato.

E l'ultimo passaggio sarà a ripetere questo cookie/modulo param in voi WWW :: Richiesta di Mechanize.

+0

! La maggior parte delle risposte di solito fornisce risposte copia/incolla, tu fornisci la logica generale dietro il processo! thanx – deckoff

Problemi correlati