Google Chrome扩展程序中的网页搜寻(JavaScript + Chrome API)

Seb*_*son 68 javascript google-chrome xmlhttprequest google-chrome-extension web-scraping

使用JavaScript以及可用的更多技术从Google Chrome扩展程序中执行网页刮取当前未打开的标签的最佳选项有哪些.其他JavaScript库也被接受.

重要的是掩盖抓取行为就像普通的Web请求一样.没有AJAX或XMLHttpRequest的指示,如X-Requested-With: XMLHttpRequestOrigin.

必须可以从JavaScript访问已删除的内容,以便在扩展中进一步操作和呈现,最有可能是作为字符串.

在任何WebKit/Chrome特定的API中是否有任何钩子:s可用于制作正常的Web请求并获取操作结果?

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

Bonus-points使这项工作从磁盘上的本地文件开始,用于初始调试.但如果这是唯一的一点是停止解决方案,那么就忽略奖励积分.

Eli*_*rey 12

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

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

  • Jeez,冷静下来.它的格式就像一个5岁的孩子,所以我认为你可以清理你的"西部最快的枪". (12认同)

Ans*_*hul 10

如果您对Google Chrome插件之外的其他内容感觉很好,请查看在后台使用Qt-Webkit的phantomjs,就像浏览器发出ajax请求一样.您可以将其称为无头浏览器,因为它不会在屏幕上显示输出,并且在您执行其他操作时可以在后台完全工作.如果需要,可以从提取的页面中导出图像,pdf.它提供了JS接口来加载页面,点击按钮等,就像在浏览器中一样.您还可以在要抓取的任何页面上注入自定义JS(例如jQuery),并使用它来访问dom并导出所需数据.由于使用Webkit,其渲染行为与Google Chrome完全相同.

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


小智 7

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

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


Nov*_*kov 6

网络抓取在Chrome扩展程序中有点复杂.一些要点:

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


Ste*_*eve 5

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

然而,被抓取的实际页面不会知道它是一个AJAX请求,因为它是通过cURL访问的.