使用Perl脚本填充网页文本框。如何?

时间:2013-09-03 09:55:19

标签: perl www-mechanize lwp

我有一个有2个文本框的网页。当我打开网页光标指向第一个文本框。我需要填写这两个文本框并单击提交。我写了代码,但没有工作。我不知道文本框名称是否在公司控制的服务器上,并且无法访问我。我会要求类似的东西 填写文本框然后执行选项卡填充其他文本框做一个选项卡,然后单击提交按钮。有什么帮助吗?

#! /usr/local/bin/perl

use LWP::UserAgent;
use WWW::Mechanize;
my $agent = WWW::Mechanize->new(autocheck => [1]);
my $url  = 'http://example.com/pages/editpage.action?pageId=197431143';
$agent->get($url);
$agent->submit_form(
    fields   => {
        username   => $username,
        password   => $password,
    },
    button   => 'Log In'
);

3 个答案:

答案 0 :(得分:0)

主机confluence.broadcom.com是NXDOMAIN,因此我无法验证您或我的代码。我认为错误在于你选择了submit_form的错误变体,它应该是这样的:

$agent->submit_form(
    with_fields => {
        username => $username,
        password => $password,
    },
);

答案 1 :(得分:0)

这里最简单的方法是手动登录页面,然后查看页面源(例如,单击工具 - >在Chrome中查看源代码)。您应该能够通过查看源来识别文本框的名称。

如果您扫描源(Ctrl-F)以找到文本框的提示,您应该能够轻松找到关联的输入字段。从那里检查“name”或“id”属性的输入属性,并将其用于输入字段。

因此,如果您的密码文本输入框由以下内容定义:

<input name="j_password" id="passwd" ....> 

输入密码的代码如下所示:

j_password => $password

根据我的经验,登录页面的字段名称经常更改,因此在脚本中使用已识别的字段名称,您应该很高兴。

答案 2 :(得分:0)

线索是:

my $hostname='your dns host name';
my $LoginPage = 'https://$hostname/login.action';
my $cookie_jar = HTTP::Cookies->new(file => 'cookies', autosave => 1, ignore_discard => 1);
my $agent = WWW::Mechanize->new(cookie_jar => {}, autocheck => 0);
$agent->{onerror}=\&WWW::Mechanize::_warn;
$agent->get($LoginPage);
$agent->form_name('loginform'); #selest proper form
$agent->field(os_username => $user); #set user name field
$agent->field(os_password => $pass); #set password field
$agent->click("login");              #click button 'Log In'

然后$ agent可以使用get方法:

$agent->get($someURL);
$content=$agent->content;

最后在变量$ content中,您有页面源代码。无论是浏览器可查看页面还是json通过rest接口获取(它都是url depended)

您必须在登录页面上查看来源。简单地将登录页面url放入浏览器,然后在firefox运行工具中的示例名为FireBug,或更复杂的查看页面源。然后这个代码示例的所有名称都有意义:)大多数组件都是通过名称而不是id标记来解决的。 需要一些cookie,因为大多数页面需要登录,将身份验证密钥存储为Web cookie,因为Web通信是无状态的。

当然这个示例适用于我当前的汇合版本6.x系列。可能这应该适用于较旧的汇合5.x。