我使用WWW :: Mechanize :: Shell来测试东西。
我的代码是:
#!/usr/bin/perl
use WWW::Mechanize;
use HTTP::Cookies;
my $url = "http://mysite/app/login.jsp";
my $username = "username";
my $password = "asdfasdf";
my $mech = WWW::Mechanize->new();
$mech->cookie_jar(HTTP::Cookies->new());
$mech->get($url);
$mech->form_number(1);
$mech->field(j_username => $username);
$mech->field(j_password => $password);
$mech->click();
$mech->follow_link(text => "LINK A", n => 1);
$mech->follow_link(text => "LINK B", n => 1);
........................ ........................ ........................ 等等。
问题是下一个:
LINK B(web_page_b.html),重定向到web_page_x.html
如果我打印$ mech-> content()的内容,请显示web_page_b.html
但我需要显示web_page_x.html,以自动提交HTML表单(web_page_x.html)
问题是:
我如何获得web_page_x.html?
感谢
答案 0 :(得分:3)
为什么不首先测试<META>
上是否存在包含重定向的代码(我猜它是web_page_b.html
标记?),然后直接转到下一页“确定这就是浏览器的目的。
这看起来像是:
$mech->follow_link(text => "LINK B", n => 1);
unless($mech->content() =~ /<meta http-equiv="refresh" content="5;url=(.*?)">/i) {
die("Test failed: web_page_b.html does not contain META refresh tag!");
}
my $expected_redirect = $1; # This should be 'web_page_x.html'
$mech->get($expected_redirect); # You might need to add the server name into this URL
顺便说一句,如果您正在使用WWW::Mechanize
进行任何类型的测试,那么您应该查看Test::WWW::Mechanize和其他Perl测试模块!它们让生活变得更轻松。
答案 1 :(得分:0)
如果它没有真正重定向,那么最好使用正则表达式follow_link
方法,而不仅仅是纯文本。
如:
$mech->follow_link(url_regex => qr/web_page_b/i , n => 1);
另一个链接相同。