我正在尝试使用 Perl 做一个简单的网络爬虫,但是很多网站都有加载的动态内容,例如使用 javascript 函数:
$(document).ready(function() {
$("#blabla").load('blublu/bla.php');
});
因此,我正在尝试调整我已有的网络爬虫(用于获取 HTML 内容)来“等待”这些脚本加载,然后才获取整个(且完整)网站内容 (HTML)。
到目前为止,我发现有人说这可以通过 WWW::Mechanize、Mechanize::Mozilla、WWW::Mechanize::Firefox 来实现。
问题是,我不太擅长 Perl 编程和模块实现,所以我想知道是否有好心人愿意在这里发布一个简单的示例或教程,展示如何完成我所要求的工作!
请您参考如下方法:
使用 www::mechanize::firefox,您必须从 Firefox“插件商店”安装和配置 mozrepl 插件。
作为起点,您可以使用几个示例程序作为起点:http://search.cpan.org/dist/WWW-Mechanize-Firefox/lib/WWW/Mechanize/Firefox/Examples.pm
此页面包含如何等待特定 HTML 元素的示例:http://search.cpan.org/dist/WWW-Mechanize-Firefox/lib/WWW/Mechanize/Firefox/Cookbook.pod#Wait_until_an_element_appears
可以轻松定制:
# It will be wait 10 seconds for blabla, then timeout
my $retries = 10;
while ($retries-- and ! $mech->is_visible( xpath => '//*[@id="blabla"]' )) {
sleep 1;
};
die "Timeout" if 0 > $retries;
# Now the element exists
$mech->click({xpath => '//*[@id="submit"]'});