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

Google Chrome扩展中的网页抓取(JavaScript+;Chrome API),javascript,google-chrome,google-chrome-extension,xmlhttprequest,web-scraping,Javascript,Google Chrome,Google Chrome Extension,Xmlhttprequest,Web Scraping,使用JavaScript和其他可用技术从Google Chrome扩展中对当前未打开的选项卡执行Web抓取的最佳选项是什么也接受其他JavaScript库。 重要的一点是屏蔽刮取,使其行为类似于正常的web请求。没有AJAX或XMLHttpRequest的指示,比如X-request-With:XMLHttpRequest或Origin 刮取的内容必须可以从JavaScript访问,以便在扩展中进行进一步的操作和表示,最有可能是作为字符串 在任何WebKit/Chrome特定的API:s中是否有

使用JavaScript和其他可用技术从Google Chrome扩展中对当前未打开的选项卡执行Web抓取的最佳选项是什么也接受其他JavaScript库。

重要的一点是屏蔽刮取,使其行为类似于正常的web请求。没有AJAX或XMLHttpRequest的指示,比如
X-request-With:XMLHttpRequest
Origin

刮取的内容必须可以从JavaScript访问,以便在扩展中进行进一步的操作和表示,最有可能是作为字符串

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

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

从磁盘上的本地文件执行此操作的额外点数,用于初始调试。但是,如果这是停止解决方案的唯一原因,那么忽略额外的好处。

我不确定仅使用JavaScript是否完全可行,但是如果您可以为扩展设置一个专用的PHP脚本,使用cURL获取页面的HTML,PHP脚本可以为您刮取页面,您的扩展可以通过AJAX请求读取页面


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

难道你就不能做一些iframe技巧吗?如果将url加载到专用框架中,则文档对象中有dom,可以执行jquery选择,否?

尝试使用
responseType=“document”
,然后使用
(新的DOMParser).parseFromString(responseText,getResponseHeader(“内容类型”)
。有关如何检测
responseType=“document
支持的示例,请参见(在从
text/html
blob创建的对象URL上同步检查
response==null


使用隐藏
X-request-With
等标题。

如果你对Google Chrome插件之外的东西很满意,那么看看它在后台使用Qt Webkit,运行起来就像一个正在发出ajax请求的浏览器。你可以称它为无头浏览器,因为它不会在屏幕上显示输出,并且可以在ba中正常工作当你在做其他事情的时候,你可以把图片、pdf从它获取的页面中导出。它提供了JS界面来加载页面,点击按钮等等,就像你在浏览器中一样。你也可以在你想要抓取的任何页面上注入自定义JS,例如jQuery,并使用它来访问dom和导出desir由于其使用的渲染行为与Google Chrome完全相同


另一个选择是使用Aptana,它基于Mozilla引擎,本身就是一个很好的概念。它也可以用作一个简单的抓取工具。

网页抓取在Chrome扩展中有点复杂。一些要点:

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

    • 我想你可以从这个开始

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


      我可以推荐使用Firebreath作为一个跨平台的Chrome/Firefox插件平台,特别是看看这个例子:

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


      是其中之一。这是一段JavaScript代码,可以在浏览器控制台中运行,为您提供一些抓取实用程序。它还可以用作chrome扩展。

      @buffer谢谢!我也这么认为,尽管有3人投票赞成关闭(??!)。如果答案是“不可能的”“,那么这是正确的,如果在一段时间内没有其他东西出现,它将被接受。iMacros正在做类似的事情,尽管我不确定它能提供多少帮助@buffer它似乎只打开选项卡并侦听已经打开的选项卡,而不是真正执行代码中的请求。至少从我能找到的情况来看。谢谢你的尝试!:D@SebNilsson你终于找到办法了吗?@Christophe Nopes,没有满足给定标准的好答案。我已经尝试过了,但我无法访问Iframe的内容,正如W3C标准中所规定的那样。我希望Chrome扩展能给我一些东西。你可以通过包含内容脚本来访问iframe内容。这是我找到的最好的解决方案,我正在我的许多扩展中使用它。通过使用$chrome启动chrome——禁用web安全性,你可以访问iFrame,但有些网站不喜欢这样,iFrame的突破让你可以格式化一下你的响应,也许可以提供几行代码作为示例。天哪,冷静点。它的格式就像一个5岁的孩子,所以我想你可以清理你的“西部最快的枪”——回答。不,对不起,它不起作用。仍然得到相同的“origin null”-错误。确实让我在那里呆了一段时间,但不幸的是,它们似乎都无法集成到Google Chrome扩展中:(它们都是独立的产品,必须在自己的环境中进行处理。尽管尝试得很好。@Sebinlsson之前忘了提到这一点,我已经编辑了答案。我认为您需要有解决方案,因为chrome扩展完全是基于您需要获得一个真正的浏览器