Google Chrome扩展程序中的网页抓取(JavaScript + Chrome API)

什么是最好的select, 从谷歌浏览器的扩展使用JavaScript和任何更多的技术可用,执行目前未打开的选项卡的网页抓取其他JavaScript库也被接受。

重要的是要掩盖行为像一个正常的networking请求 。 没有AJAX或XMLHttpRequest的指示,如X-Requested-With: XMLHttpRequestOrigin

抓取的内容必须可以从JavaScript访问,以便在扩展中进行进一步的操作和呈现,最有可能的是作为一个string。

在任何WebKit / Chrome特定的API中,是否存在任何钩子:可用于发出正常的Web请求并获得操作结果?

 var pageContent = getPageContent(url); // TODO: Implement var items = $(pageContent).find('.item'); // Display items with further selections 

Bonus-points使这个工作从磁盘上的本地文件进行初始debugging。 但如果这是停止解决scheme的唯一的一点,那么忽略奖励点。

如果您对Chrome浏览器插件以外的东西很满意 ,请查看在后台使用Qt-Webkit的phantomjs ,并像运行Ajax请求的浏览器一样运行。 您可以称之为无头浏览器,因为它不会在屏幕上显示输出,并且在您做其他事情时可以在后台工作。 如果你愿意的话,你可以将图片,PDF格式的图片导出。 它提供了JS界面来加载页面,点击button等很像你在浏览器中。 你也可以在你想要抓取的页面上插入自定义的JS例如jQuery,并使用它来访问DOM并导出所需的数据。 由于其使用的Webkit,其渲染行为就像Google Chrome一样。

另一个select是使用基于Mozilla Engine的Aptana Jaxer ,本身就是一个非常好的概念。 它也可以用作简单的刮削工具。

尝试使用XHR2 responseType = "document"并使用我的text/html补丁重新使用(new DOMParser).parseFromString(responseText, getResponseHeader("Content-Type")) 。 有关如何检测responseType = "document支持(同步检查从text/html blob创build的对象URL上的response === null的示例,请参阅https://gist.github.com/1138724

使用Chrome WebRequest API来隐藏X-Requested-With等标题。

自从问这个问题以来,已经发布了很多工具。

artoo.js就是其中之一。 这是一段JavaScript代码,用于在浏览器的控制台中运行,为您提供一些抓取工具。 它也可以用作Chrome扩展。

网页抓取在Chrome扩展程序中有点令人费解。 一些观点:

  • 您运行内容脚本以访问DOM。
  • 后台页面(每个浏览器一个)可以向内容脚本发送和接收消息 。 也就是说,您可以运行内容脚本来设置RPC端点,并在后台页面的上下文中激发指定的callback作为响应。
  • 您可以在网页的所有框架中执行内容脚本,然后将文档树(由页面包含的1..N帧组成)拼接在一起。
  • 正如SKbuild议的那样,您的后台页面可以将数据作为XMLHttpRequest发送到某种轻量级HTTP服务器,这些HTTP服务器在本地进行侦听。

我不确定这完全可能只用JavaScript,但是如果你可以为你的扩展设置一个专用的PHP脚本,使用cURL来获取页面的HTML,那么PHP脚本可以为你提供页面,你的扩展可以读取它通过一个AJAX请求。

被抓取的实际页面不会知道这是一个AJAX请求,但是,因为它正在通过cURL访问。

我想你可以从这个例子开始。

所以基本上你可以尝试使用扩展+插件组合。 扩展将有权访问DOM(包括插件)并驱动该进程。 而插件会发送实际的HTTP请求。

我可以推荐使用Firebreath作为跨平台的Chrome / Firefox插件平台,特别要看看这个例子: Firebreath – 使用+ SimpleStreamsHelper + + + +请求+

你不能只是做一些iframe的技巧吗? 如果你加载到一个专门的框架,你有一个文件对象的DOM,可以做你的jQuery的select,不是吗?