我的 chrome 扩展程序抓取了各种网页。我还没有找到一种完全有效的方法。我试过的,很接近:
从后台脚本中,我可以
fetch
,然后通过htmlparser2运行html来解析它(我无法获取文档,但是对于简单的提取,这是可以的)。这适用于静态站点,但不适用于使用 javascript 呈现内容的站点。
我可以创建一个带有扩展提供的 html 的选项卡,并在该选项卡中加载我试图在 iframe 中抓取的目标(在使用
declarativeNetRequest
删除 X-Frame-Options
和相关标题之后)。不幸的是,然后我遇到了同源策略,这意味着我无法访问 iframe 的内容——具体来说,iframe.contentDocument
最终为空。我尝试使用 chrome.scripting.executeScript
将脚本注入 iframe,以为我可以发布消息并让它响应,但我没有权限在 chrome-extension:// 标签上注入脚本,即使它是我自己的标签! (这看起来很愚蠢,但也许是设计使然。)
我知道我可以为每个我想抓取的网址创建一个新标签;然而,为了做到这一点,我需要一个宽松的 contentScripts 政策(我有几十个 url),而且我真的不想将 contentScript 注入用户的常规浏览选项卡(尽管如果我发现没有其他解决方案)。此外,选项卡的显示和隐藏,或选项卡上的图标/标题变化的干扰,都是非常糟糕的用户体验。
Firefox 有隐藏标签,这很好,但 Chrome 不支持它们。
有更清洁的方法吗?