繁体   English   中英

Perl的WWW :: Mechanize如何扩展使用JavaScript添加到自己的HTML页面?

[英]How can Perl's WWW::Mechanize expand HTML pages that add to themselves with JavaScript?

如上一个问题所述,我正在为QuakeLive网站编写爬虫。
我一直在使用WWW :: Mechanize来获取Web内容,这对于除匹配项之外的所有页面均适用。 问题是我需要获取所有这些ID:

<div id="ffa_c14065c8-d433-11df-a920-001a6433f796_50498929" class="areaMapC">

这些用于构建特定的匹配URL,但我做不到。

我设法仅通过FireBug看到了这些ID,而我尝试过的页面下载器,解析器和getter都无法提供帮助。 我所能得到的是该页面的一个简单版本,该代码是通过在Firefox中“显示源代码”可以看到的代码。

由于FireBug显示了这些ID,因此我可以放心地假设它们已经加载了,但是我不明白为什么没有其他东西可以得到它们。 它可能与JavaScript有关。

您可以在此处找到页面示例

要获取包含这些ID的DOM,您可能必须在该站点上执行javascript代码。 我不知道有任何库允许您执行此操作,然后在perl中内省生成的DOM,因此仅控制一个实际的浏览器,然后再向其询问DOM或仅请求其中的一部分,似乎是一个不错的选择解决方法。

各种浏览器提供了以编程方式进行控制的方法。 使用基于Mozilla的浏览器(例如Firefox),就像将mozrepl加载到浏览器中,从perl空间打开套接字,发送几行javascript代码以实际加载该页面,然后再添加一些javascript代码一样简单向您提供您感兴趣的DOM部分。 然后,您可以使用CPAN上的许多JSON模块之一解析结果。

另外,您可以浏览页面上执行的javascript代码并弄清楚它的实际作用,然后在您的搜寻器中模仿它。

问题是机械化模仿了浏览器的网络层,而不是渲染或javascript执行层。

许多人使用Microsoft提供的Web浏览器控件。 这是控件中IE的完整实例,您可以在WinForm,WPF或普通的旧版控制台应用程序中托管该控件。 它除其他功能外,让您加载网页并运行javascript以及发送和接收javascript命令。

以下是有关如何托管浏览器控件的合理介绍: http : //www.switchonthecode.com/tutorials/csharp-snippet-tutorial-the-web-browser-control

通过ajax请求发送大量数据。 您需要以某种方式在抓取工具中说明这一点。

看来他们正在使用AJAX。 我可以看到使用FireBug发送请求的位置。 您可能需要尝试解析并执行影响DOM的javasript来解决这个问题。

您应该能够使用WWW :: HtmlUnit-它加载并执行javascript。

阅读常见问题解答 WWW :: Mechanize不执行javascript。 他们可能正在使用JavaScript来更改页面。 您将需要其他方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM