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

问题描述 投票:0回答:8

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

重要的是屏蔽抓取,使其表现得像正常的网络请求。没有 AJAX 或 XMLHttpRequest 的指示,例如 X-Requested-With: XMLHttpRequest

Origin

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

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

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

通过磁盘上的本地文件进行此工作的奖励点,用于初始调试。但如果这是唯一的一点就是停止解决方案,那么请忽略奖励积分。

javascript google-chrome google-chrome-extension xmlhttprequest web-scraping
8个回答
13
投票
尝试使用

XHR2responseType = "document"

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

使用

Chrome WebRequest API 隐藏 X-Requested-With

 等标头。




9
投票
网页抓取在 Chrome 扩展中有点复杂。几点:


5
投票
我不确定仅使用 JavaScript 是否完全可能,但如果您可以为您的扩展程序设置专用的 PHP 脚本,使用 cURL 获取页面的 HTML,则 PHP 脚本可以为您抓取页面,并且您的扩展程序可以通过 AJAX 请求读取它。

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


4
投票
我认为你可以从这个

示例开始。

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

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

Firebreath - Making+HTTP+Requests+with+SimpleStreamsHelper


3
投票
你就不能做一些 iframe 技巧吗?如果将 url 加载到专用框架中,则文档对象中就有 dom,并且可以进行 jquery 选择,不是吗?


0
投票

// Import Crawlbase library import Crawlbase from 'crawlbase'; // Function to perform web scraping of a not currently open tab async function getPageContent(url) { try { // Use Crawlbase to make a normal web request and get the results const crawlbase = new Crawlbase(); const pageContent = await crawlbase.fetch(url); // The scraped content is accessible from JavaScript as a string return pageContent; } catch (error) { console.error('Error fetching page content:', error); throw error; } } // Usage example async function fetchDataAndManipulate(url) { try { const pageContent = await getPageContent(url); // Manipulate and present the content within the extension const items = $(pageContent).find('.item'); // Display items with further selections console.log(items); } catch (error) { console.error('Error fetching and manipulating data:', error); } } // Example usage with a URL const url = 'https://example.com'; fetchDataAndManipulate(url);

此代码利用 Crawlbase 库以模仿正常 Web 行为的方式发出 Web 请求,而无需指示 AJAX 或 XMLHttpRequest。抓取的内容可以作为 JavaScript 中的字符串进行访问,以便在扩展程序中进行进一步的操作和呈现。这里没有直接解决使其从磁盘上的本地文件工作的好处,但

Crawlbase是一个功能强大的库,如果需要,可以针对此类场景进行扩展。

© www.soinside.com 2019 - 2024. All rights reserved.