我正在尝试使用 perl 自动登录网站,然后让它单击链接以从我的帐户中获取特定数据。以下是具体细节:
- 去www.bwsc.org 填写账号信息(账号和电表号)
- 提交将带我到基本帐户页面的表格
- 点击此页面上的链接之一获取特定帐户信息
我总是卡在第一步上。也许我做错了,但我想我可以使用 perl LWP 库来访问表单数据并填写信息。作为第一步,我查看了来自 www.bwsc.org 的相关源 html 以获取表单信息:
<div id="logonbox_SB">
<form action="/ACCOUNTS/security_main.asp" method="get">
<div id="FS_1">
<label for="AcctNum" id="acctnum_label">Account Number</label>
<input name="AcctNum" type="text" class="formtext1" size="9" maxlength="9" />
</div>
<div id="FS_2">
<label for="MtrNum" id="accsnum_label">Access Number</label>
<input name="MtrNum" type="text" class="formtext2" size="4" maxlength="4" />
</div>
<input type="image" value="Submit" name="search" class="boxsubmitbtn" src="/images/buttons/login.gif" alt="Login">
</form>
<p><a href="/ACCOUNTS/accounts.asp">Need help logging in?</a> </p>
</div><!--end logonbox_SB-->
AcctNum 和 MtrNum 文本字段是我需要填写的。下面是我为尝试执行此操作而编写的代码:
#! /usr/bin/perl
use strict;
use LWP::UserAgent;
use HTTP::Request::Common;
my ($ua, $request, $response, $content);
$ua = LWP::UserAgent->new;
$request = new HTTP::Request('GET','http://www.bwsc.org/ACCOUNTS/security_main.asp?AcctNum=XXX&MtrNum=XXX' );
$response = $ua->request($request);
my $content = $response->content;
open(FILE, ">out.txt");
print FILE $content;
close(FILE);
如果我查看输出文件 out.txt(我认为它应该包含响应 html),它只会给我一个错误页面的 html,说我没有提供有效的帐户信息。我不太确定我做错了什么。我尝试了各种方法来按照 cpan 文档的建议传递参数,但没有成功。
一些注意事项:
- 有问题的表单没有 name/id 属性(不确定这是否重要)
- 表单使用的是get方法
- 包含响应 html 的 out.txt 文件与我使用浏览器故意错误登录时收到的 html 不同。我的意思是,如果我使用浏览器并且不输入任何帐户信息,则浏览器中的错误页面与我在使用此脚本时收到的错误页面不同。
最佳答案
以下代码在我的项目中有效
use HTTP::Headers;
use LWP::UserAgent
my $headers = HTTP::Headers->new('Accept-Encoding' => 'gzip');
my $useragent = LWP::UserAgent->new(agent => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.114 Safari/537.36', timeout => 20, keep_alive => 100, default_headers => $headers );
my $url = 'http://www.bwsc.org/ACCOUNTS/security_main.asp?AcctNum=XXX&MtrNum=XXX';
my $response = $useragent->get($url);
my $content = $response->content;
试一试。
关于html - 使用 perl LWP lib 传递表单数据时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21468381/