繁体   English   中英

如何让WWW-Mechanize登录Wells Fargo的网站?

[英]How can I get WWW-Mechanize to login to Wells Fargo's website?

我正在尝试使用Perl的WWW :: Mechanize登录我的银行并提取交易信息。 通过浏览器登录我的银行(富国银行)后,它会短暂显示一个临时网页,上面写着“请等待我们验证您的身份”。 几秒钟后,它会进入银行的网页,我可以在那里获取我的银行数据。 唯一的区别是URL包含多个附加到临时页面的URL的“GET”参数,该参数只有一个sessionID参数。

我能够成功地让WWW :: Mechanize从登录页面登录,但它被卡在临时页面上。 标题中有一个<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"
);

对不起,我编写Perl已经有好几年了。 但是,由于此问题尚未发布“复制和粘贴”答案,以下是如何在Ruby中抓取Wells Fargo:

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或类似的。 我在互联网存档/回程机器中找到了源代码并对其进行了修改以实现您在上面看到的内容。 所以,感谢Youngblood先生或类似的人,无论你在哪里 - 并感谢教我的元刮技巧!

您需要对该中间页面上发生的事情进行逆向工程。 例如,它是否使用Javascript来设置一些cookie? Mech不会在页面上解析或执行Javascript,因此它可能会尝试遵循元刷新但却遗漏了一些关于最终请求需要发生什么的重要信息。

尝试使用像Firebug这样的工具来观察浏览器遵循元刷新时发送的请求。 检查为请求最终页面而发送的所有请求标头,包括cookie。 然后使用Mech复制它。

如果您知道下一页的位置,可以在使用附加的get参数后尝试获取它

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

首先你需要知道的是这个Javascript与否:我建议使用Web Developer (但你也可以使用NoScript )来禁用Javascript并尝试通过浏览器登录(但首先你要清除所有与你的目标网站相关的cookie! ) 。

如果您仍然(禁用Javascript)可以登录这不是Javascript问题 ,您需要调查HTTP标头(例如,它可能是单击按钮的x,y坐标或仅在加载CSS文件时收到的某些cookie等)。

我建议使用HttpFox来检查HTTP标头。 您需要运行HttpFox日志记录,然后再次执行登录(顺便说一下,在执行此操作之前禁用图像会显着减少日志)。 之后,您需要检查每个请求和相应的响应,以找到设置隐藏cookie的位置或创建一些隐藏的表单参数。

如果您在禁用Javascript后无法登录,那么您也需要查看标题。 您需要将HTTP标头响应中提供的cookie与您在以后的请求中使用的Cookie进行比较。 在您找到带有“恶意”Javascript的HTML后,您可以分析此Javascript以查找此cookie(或表单参数)如何创建的算法。

你最后一步将在WWW :: Mechanize请求中重复这个cookie / form param

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM