2010-04-29 2 views
5

Я пытаюсь использовать Perl's WWW::Mechanize для входа в мой банк и вытащить информацию о транзакции. После входа в браузер в мой банк (Wells Fargo), он на короткое время отображает временную веб-страницу, в которой говорится что-то вроде строки «пожалуйста, подождите, пока мы проверим вашу личность». Через несколько секунд он перейдет на веб-страницу банка, где я могу получить данные своего банка. Единственное различие заключается в том, что URL-адрес содержит еще несколько параметров «GET», добавленных к URL-адресу временной страницы, в котором был только параметр sessionID.Как я могу получить WWW-Mechanize для входа на сайт Wells Fargo?

Я смог успешно получить WWW :: Механизировать для входа со страницы входа, но он застревает на временной странице. В заголовке есть тег <meta http-equiv="Refresh" ... поэтому я попробовал $mech->follow_meta_redirect, но он не застал меня и за этой временной страницей.

Любая помощь, чтобы пройти мимо этого, будет оценена по достоинству. Заранее спасибо.

Вот скелетный код, который получает меня застрял на временной странице:

#!/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" 
); 

ответ

2

Вам нужно декомпилировать, что происходит на этой странице посредника. Использует ли он Javascript для установки некоторых файлов cookie, например? Механизм не будет анализировать или выполнять Javascript на странице, поэтому он может попытаться выполнить метаобновление, но не получит некоторую важную информацию о том, что должно произойти для окончательного запроса.

Попробуйте использовать такой инструмент, как Firebug, чтобы просмотреть запрос, который отправляется, когда браузер следует метаобновлению. Изучите все заголовки запросов, включая файлы cookie, которые отправляются для запроса последней страницы. Затем используйте Мех, чтобы дублировать это.

+0

Спасибо за указатель на Firebug. Я установил его и отметил, что на странице посредника есть ссылка '' строка, которая ссылается на функцию javascript. Я предполагаю, что мне не повезло, так как Мех не может иметь дело с javascript на этом этапе. –

+1

Возможно, вам не повезло, вам просто нужно выяснить, что делают эти функции Javascript, и заставить Мех сделать то же самое. Используйте Firebug для просмотра транзакции HTTP - есть ли какие-либо поля POST или файлы cookie, которые вы не видели раньше? JS, вероятно, добавил их, поэтому добавьте те же вещи с Mech. – friedo

1

Если вы знаете местоположение следующей страницы вы можете попытаться получить его после установки дополнительных параметров GET с использованием

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

Это добавит заголовок запроса, но не добавит поля в URI запроса или содержимое POST. –

3

К сожалению, это было года, так как я закодирован Perl. Однако, так как нет «скопировать и вставить» ответ отвечал на этот вопрос еще, вот как скрести Wells Fargo в 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 

Библиография: Там парень, который написал версию этого скрипта, отправил его его каталог кода, а затем переслал все это в свой блог. Его фамилия - Youngblood или тому подобное. Я нашел источник в машине интернет-архива/пути назад и изменил его, чтобы сделать то, что вы видите выше. Итак, спасибо г-ну Янгблуду или тому подобное, где бы вы ни были - и спасибо, что научили меня мета-хитрости!

1

Прежде всего, необходимо знать, это Javascript или нет: я рекомендую использовать Web Developer (но вы можете использовать NoScript тоже), чтобы отключить Javascript и попытаться войти в систему через браузер (но сначала нужно очистить все куки, связанные с вашим целевой сайт!).

Если вы все еще (с Javascript отключен), может войти в чем это не Javascript вопрос и вы должны исследовать HTTP-заголовков (это может быть х, у координаты нажатой кнопки, например, или некоторые куки получили только при загрузке файла CSS и т. д.).

Я рекомендую использовать HttpFox для проверки HTTP-заголовков. Вам нужно запустить ведение журнала HttpFox и после этого выполнить логин снова (кстати, отключение изображений перед этим значительно сократит ваш журнал).После этого вам нужно проверить каждый запрос и соответствующий ответ, чтобы найти, где настроены скрытые файлы cookie или какой-либо скрытый параметр формы.

Если вы не можете войти в систему после отключения Javascript, вам также нужно посмотреть на заголовки. Вам нужно сравнить файлы cookie, предоставленные в ответе HTTP-заголовка, с кукисами, которые у вас есть в более позднем запросе. После того, как вы найдете html со «вредоносным» Javascript, вы можете проанализировать этот Javascript, чтобы найти алгоритм создания этого файла cookie (или формы).

И вы последним шагом будет Повторите этот файл cookie/form param в вас WWW :: Запросить механический запрос.

+0

! Большинство ответов обычно предоставляют ответы на копирование/вставку, вы предоставляете общую логику процесса! Thanx – deckoff