使用JavaScript以及可用的更多技术,从Google Chrome扩展程序中网页刮取当前未打开的标签的最佳选项是什么? 也接受其他JavaScript库。
重要的是屏蔽抓取行为就像普通的网络请求一样。没有AJAX或XMLHttpRequest的指示,例如X-Requested-With: XMLHttpRequest
或Origin
。
必须可以从JavaScript访问已删除的内容,以便在扩展程序中进行进一步操作和演示,最有可能是字符串。
在任何特定于WebKit / Chrome的API中是否有任何钩子:可用于制作正常的网络请求并获取操作结果?
var pageContent = getPageContent(url); // TODO: Implement
var items = $(pageContent).find('.item');
// Display items with further selections
Bonus-points使这项工作从磁盘上的本地文件 开始,用于初始调试。但如果那是唯一的一点就是停止解决方案,那么就忽略奖励积分。
答案 0 :(得分:12)
尝试使用XHR2 responseType = "document"
并使用my text/html
patch返回(new DOMParser).parseFromString(responseText, getResponseHeader("Content-Type"))
。有关我如何检测responseType = "document
支持的示例,请参阅https://gist.github.com/1138724(同步检查从response === null
blob创建的对象网址上的text/html
。
使用Chrome WebRequest API隐藏X-Requested-With
等标题。
答案 1 :(得分:10)
如果您对谷歌Chrome插件之外的其他内容感到满意,请查看phantomjs在后台使用Qt-Webkit并运行就像浏览器发出ajax请求一样。您可以将其称为无头浏览器,因为它不会在屏幕上显示输出,并且在您执行其他操作时可以在后台完全工作。如果需要,可以从提取的页面中导出图像,pdf。它提供了JS接口来加载页面,点击按钮等,就像在浏览器中一样。您还可以在要抓取的任何页面上注入自定义JS(例如jQuery),并使用它来访问dom并导出所需数据。由于其使用Webkit,其呈现行为与Google Chrome完全相同。
另一个选择是使用基于Mozilla引擎的Aptana Jaxer,它本身就是一个非常好的概念。它也可以用作简单的刮削工具。
答案 2 :(得分:7)
自从提出这个问题以来,已经发布了很多工具。
artoo.js就是其中之一。这是一段JavaScript代码,旨在在您的浏览器控制台中运行,为您提供一些抓取工具。它也可以用作镀铬扩展。
答案 3 :(得分:6)
网络抓取在Chrome扩展程序中有点复杂。一些要点:
答案 4 :(得分:5)
我不确定只使用JavaScript是完全可能的,但是如果您可以为扩展程序设置专用的PHP脚本,使用cURL来获取页面的HTML,那么PHP脚本可能会为您和您的页面抓取页面扩展可以通过AJAX请求读取它。
正在抓取的实际页面不会知道它是一个AJAX请求,因为它是通过cURL访问的。
答案 5 :(得分:4)
我认为你可以从这个example开始。
所以基本上你可以尝试使用Extension + Plugin组合。扩展可以访问DOM(包括插件)并驱动进程。插件会发送实际的HTTP请求。
我可以推荐使用Firebreath作为跨平台的Chrome / Firefox插件平台,特别是看一下这个例子:Firebreath - Making+HTTP+Requests+with+SimpleStreamsHelper
答案 6 :(得分:2)