以下链接使用WWW :: Mechanize

时间:2014-07-16 23:01:30

标签: perl onclick www-mechanize

我正在尝试使用WWW :: Mechanize访问内部网页以启动和停止应用程序。到目前为止,我能够成功登录该应用程序。我的下一个操作项是从服务列表中识别特定服务并停止它们。

我遇到的问题是我无法关注网页上的链接。在查看HTML和链接对象之后,很明显没有URL,而是点击事件。

这是HTML的片段

<ul>
<li>
<a href="#" id="j_id_id1:j_id_id9:2:j_id_id10" name="j_id_id1:j_id_id9:2:j_id_id10" onclick="A4J.AJAX.Submit('j_id_id1',event,{'similarityGroupingId':'j_id_id1:j_id_id9:2:j_id_id10','parameters':{'j_id_id1:j_id_id9:2:j_id_id10':'j_id_id1:j_id_id9:2:j_id_id10','ajaxSingle':'j_id_id1:j_id_id9:2:j_id_id10'} ,'containerId':'j_id_id0'} );return false;" style="color:#3BB9FF;">servicename</a>
</li>
</ul>

链接对象转储

$VAR1 = \bless( [
                   '#',
                   'servicename',
                   'j_id_id1:j_id_id9:2:j_id_id10',
                   'a',
                   bless( do{\(my $o = 'http://blah.services.jsf')}, 'URI::http' ),
                   {
                     'href' => '#',
                     'style' => 'color:#3BB9FF;',
                     'name' => 'j_id_id1:j_id_id9:2:j_id_id10',
                     'onclick' => 'A4J.AJAX.Submit(\'j_id_id1\',event,{\'similarityGroupingId\':\'j_id_id1:j_id_id9:2:j_id_id10\',\'parameters\':{\'j_id_id1:j_id_id9:2:j_id_id10\':\'j_id_id1:j_id_id9:2:j_id_id10\',\'ajaxSingle\':\'j_id_id1:j_id_id9:2:j_id_id10\'} ,\'containerId\':\'j_id_id0\',\'actionUrl\':\'/pages/services.jsf;jsessionid=NghBSoEJZKXbWcK0uVzcHvyebl8G_zSpf_Zu4uqrLI7xosHAnheK!1108773228\'} );return false;',
                     'id' => 'j_id_id1:j_id_id9:2:j_id_id10'
                   }
                 ], 'WWW::Mechanize::Link' );

到目前为止,这是我的代码:

#!/usr/bin/perl
use strict;
use warnings; 
use Data::Dumper;
use WWW::Mechanize;            

my $username = 'myuser'; 
my $password = 'mypass';
my $url      = 'myinternalurl';

my $mech = WWW::Mechanize->new();
$mech->credentials($username,$password);
$mech->get($url);
my $link = $mech->find_link( text => 'servicename' );
#print Dumper \$link;
#$mech->follow_link( url => $link->url_abs() );
$mech->get($link->url_abs());
print $mech->text();

如果我使用follow_link,我会获得Link not found at log_in.pl line 16.。如果我使用get,那么我会回到同一页面。问题是所有这些服务似乎都是超链接,但与我的主网址具有相同的URL。

以下是该网页的图片:

enter image description here

当我手动单击某个服务时,“操作和属性”部分会更改,这允许用户查看他们刚刚单击的服务的“操作”和“属性”。每个服务都有不同的操作和属性集。

我应该如何使用perl进行此操作? WWW :: Mechanize这个错误的工具吗?任何人都可以建议一个可以提供帮助的解决方案或备用perl模块。安装任何CPAN模块都不是问题。使用最新版本的perl也不是问题。我刚开始使用perl进行自动化,目前还没有意识到可以完成工作的所有模块。

期待您的指导和帮助。

注意:如果您认为有任何相关信息,我可能错过了,请发表评论,我会更新问题以添加更多详细信息。我修改了专有信息。

1 个答案:

答案 0 :(得分:2)

该按钮包含Javascript onclick事件,使用WWW::Mechanize时无效。

根据文档:

  

请注意,Mech不支持JavaScript,您需要其他软件。请查看"JavaScript" in WWW::Mechanize::FAQ了解更多信息。

支持表单中Javascript的一种替代方法是WWW::Mechanize::Firefox