我正在尝试使用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。
以下是该网页的图片:
当我手动单击某个服务时,“操作和属性”部分会更改,这允许用户查看他们刚刚单击的服务的“操作”和“属性”。每个服务都有不同的操作和属性集。
我应该如何使用perl进行此操作? WWW :: Mechanize这个错误的工具吗?任何人都可以建议一个可以提供帮助的解决方案或备用perl模块。安装任何CPAN模块都不是问题。使用最新版本的perl也不是问题。我刚开始使用perl进行自动化,目前还没有意识到可以完成工作的所有模块。
期待您的指导和帮助。
注意:如果您认为有任何相关信息,我可能错过了,请发表评论,我会更新问题以添加更多详细信息。我修改了专有信息。
答案 0 :(得分:2)
该按钮包含Javascript onclick事件,使用WWW::Mechanize
时无效。
根据文档:
请注意,Mech不支持JavaScript,您需要其他软件。请查看"JavaScript" in
WWW::Mechanize::FAQ
了解更多信息。
支持表单中Javascript的一种替代方法是WWW::Mechanize::Firefox
。