2015-10-05 83 views
0

这是一个关于Web 2.0之后的perl web scrapers的古老问题;他们无法解析动态加载的页面,因为它们需要某种JavaScript引擎才能呈现页面。与简单渲染JavaScript相比,这个问题更为复杂,因为Perl也必须能够管理和维护DOM。Perl:解析AJAX加载的内容

看起来WWW::SeleniumWWW::Mechanize::Firefox能够通过利用FireFox(或其他浏览器)为其进行渲染来实现此目的。然而,V8已经变得如此流行(正如Node.js所见),所以我很好奇是否有任何新库可以利用它,或者从那时起就是独立于浏览器的解决方案,我不知道。

我可能通常认为这是一个可关闭的问题,但是当谷歌搜索和堆栈溢出时,结果如此之少,不应该有太多的解决方案(如果有的话)。


相关(旧的)问题:

+0

我有点糊涂了......做你是指“独立于浏览器的解决方案?”如果您要抓取网页,则页面中必然存在差异,具体取决于您使用哪种浏览器呈现它,无论是Firefox还是PhantomJS等无头浏览器。你的意思是你想要一个不需要你安装Firefox的解决方案? – ThisSuitIsBlackNot

+0

@ThisSuitIsBlackNot yes;从技术上讲Mechanize是一个浏览器。我试图得到的是能够呈现JS操作的结果,而不使用第三方浏览器或安装其他浏览器二进制文件。 – vol7ron

+0

换句话说,你想要一个纯Perl的Javascript引擎?也许尝试[Javascript.pm](https://metacpan.org/pod/JavaScript),虽然这不是一个浏览器;我认为你将不得不将自己与Mechanize整合在一起。我能找到的其他东西都需要外部二进制文件:例如,WWW :: Mechanize :: PhantomJS需要安装PhantomJS; [JavaScript :: V8](https://metacpan.org/pod/JavaScript::V8),也不是浏览器,需要你安装V8。 – ThisSuitIsBlackNot

回答

0

你提到硒但后来的版本Selenium::Remote::Driver与硒2.0集线器工作。

我看你也可以使用它没有一个硒枢纽 没有独立服务器(我没有使用过这部分)

由于v0.25的,它可以使用这个模块没有一个独立的 服务器 - 也就是说,您不需要JRE或JDK来运行您的Selenium测试。有关详细信息,请参阅Selenium :: Chrome,Selenium :: PhantomJS和 Selenium :: Firefox。如果您还想要其他浏览器 ,请在Github上给我们一个提示。

PhantomJS可能会感兴趣,因为它是一个无头的浏览器

这可能不是一个答案,但它是太长了评论

+0

这可能很有趣。还有一个机械化的插件:http://search.cpan.org/~corion/WWW-Mechanize-PhantomJS-0.02/lib/WWW/Mechanize/PhantomJS/Examples.pm虽然,它似乎像使用Firefox作为无头发将是完成同样的事情。我想我真的不能避免第三方渲染器,机械化似乎没有更多的本地(希望将有一个WWW :: Mechanize :: V8) – vol7ron

+0

@ vol7ron FWIW,我不认为WWW: :机械化:: PhantomJS与WWW :: Mechanize :: Firefox一样受到支持。近一年前,我提交了一个[bug报告和补丁](https://rt.cpan.org/Public/Bug/Display.html?id=100191),但没有任何回应。对于那个特定的项目,我最终只使用了PhantomJS而不是Perl,但我想我也可以使用我的补丁版本的模块。我同意,一个纯Perl的Javascript感知浏览器会很好。 – ThisSuitIsBlackNot