Google Chrome扩展中的网页抓取(JavaScript+;Chrome API)
使用JavaScript和其他可用技术从Google Chrome扩展中对当前未打开的选项卡执行Web抓取的最佳选项是什么也接受其他JavaScript库。 重要的一点是屏蔽刮取,使其行为类似于正常的web请求。没有AJAX或XMLHttpRequest的指示,比如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中是否有
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扩展完全是基于您需要获得一个真正的浏览器