0

我有一个有 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'
);
4

3 回答 3

0

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

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

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

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

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

j_password => $password

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

于 2013-09-12T04:05:38.067 回答
0

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

$agent->submit_form(
    with_fields => {
        username => $username,
        password => $password,
    },
);
于 2013-09-03T11:12:55.403 回答
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 你有页面源。无论是浏览器可见页面还是rest接口获取的json(取决于url)

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

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

于 2017-08-11T11:41:42.530 回答