我有一堆网页,我想通过脚本浏览并获取所有内容。我知道链接是每个页面上的第18个链接。我有以下代码作为测试,只需按一下链接和屏幕刮擦:
use strict;
use WWW::Mechanize;
my $start = "http://*some-webpage*";
my $mech = WWW::Mechanize->new( autocheck => 1 );
$mech->get( $start );
open(Output, ">mech_test.txt") or die $!;
$mech->follow_link(url_regex => qr//, n => 18 );
print Output $mech->response()->content();
close(Output);
不幸的是,我尝试访问的链接在href标记中没有任何内容。查看链接的页面来源如下:
<a href="" onclick="return _doClick('CA256D6E001A7020.80376e858b0791b1ca256d7300098304/$Body/0.155A', this, null)">Next >></a>
我相信这是javascript,机械化无法遵循此链接。有什么想法来解决这个问题吗?
答案 0 :(得分:1)
您应该使用WWW::Scripter
模块,它是使用W3C DOM并为脚本提供支持的WWW::Mechanize
的子类。
答案 1 :(得分:-2)
如果JS非常简单,那么它可以是纯perl。
你必须找到javascript子程序,如果它很简单,你就可以把它作为perl sub重现。
然后你可以自己建立链接。
my @javascript_links = $html =~ m#return _doClick\((.*?)\)#gis;
#array contain 'CA256D6E001A7020.80376e858b0791b1ca256d7300098304/$Body/0.155A', this, null
my @links = extract_links(@javascript_links);
foreach my $link (@links){
$mech->get( $link )
}
#***
sub extract_links{
my $line = shift;
my @params = split(/,/,$line);
trim(@params);
#mimic JS logic here, whatever it is
my $link = "/some/path/here/to/add/some.php?someparam1=val1¶m=$params[0]";
return $link;
}