Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何让WWW-Mechanize登录富国银行';s的网站?_Perl_Www Mechanize - Fatal编程技术网

Perl 如何让WWW-Mechanize登录富国银行';s的网站?

Perl 如何让WWW-Mechanize登录富国银行';s的网站?,perl,www-mechanize,Perl,Www Mechanize,我正在尝试使用Perl登录我的银行并获取交易信息。通过浏览器登录到我的银行(Wells Fargo)后,它会短暂显示一个临时网页,上面写着“请稍候,我们正在验证您的身份”。几秒钟后,它进入银行的网页,在那里我可以获得我的银行数据。唯一的区别是URL包含多个附加到临时页面URL的“GET”参数,临时页面只有一个sessionID参数 我能够成功地让WWW::Mechanize从登录页面登录,但它被卡在临时页面上。有一个follow\u meta\u重定向,但它也没有让我通过那个临时页面 如有任何帮

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

我能够成功地让WWW::Mechanize从登录页面登录,但它被卡在临时页面上。有一个
follow\u meta\u重定向
,但它也没有让我通过那个临时页面

如有任何帮助,我们将不胜感激。提前谢谢

下面是让我陷入临时页面的基本代码:

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

你需要对中间页面上发生的事情进行反向工程。例如,它是否使用Javascript设置一些cookie?Mech不会在页面上解析或执行Javascript,因此它可能会尝试跟踪元刷新,但缺少一些关于最终请求需要执行什么的关键信息


尝试使用类似的工具来观察浏览器在元刷新后发送的请求。检查发送到请求最终页面的所有请求头,包括cookie。然后使用Mech复制该页面。

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

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

对不起,我已经多年没有编写Perl了。然而,由于还没有关于这个问题的“复制粘贴”答案,下面介绍如何在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

引用作品:有个人写了这个脚本的一个版本,将它发布到他的代码目录,然后将整个内容转发到他的博客。他的姓是扬布拉德或类似的人。我在internet archive/way back机器中找到了源代码,并对其进行了修改,使其符合您在上面看到的内容。所以,无论你身在何处,都要感谢扬布拉德先生或类似的人——也感谢你教我元刮技巧

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

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

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

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


最后一步是在WWW::Mechanize请求中重复此cookie/form参数

,感谢您提供了指向Firebug的指针。我安装了它,并注意到中间页面中有一行
引用了javascript函数。我猜我运气不好,因为Mech现在不能处理javascript。你可能不会运气不好,你只需要找出那些javascript函数在做什么,让Mech做同样的事情。使用Firebug监视HTTP事务——是否有您以前没有看到的POST字段或cookie?JS可能添加了它们,所以使用Mech添加相同的内容。这将添加请求头,但不会向请求URI或POST内容添加字段。!大多数答案通常提供复制/粘贴答案,您可以提供流程背后的一般逻辑!塔克斯