如何获取整个文档的文本内容?

11

我正在开发一个Chrome扩展程序,需要在某个阶段确定当前页面的语言。为达到这个目的,我的计划是提取页面的文本内容(或者至少其中的一部分)并将其传递给翻译 API。然而,我找不到任何一种直接获取文档中所有 textNode 的方法。

备用方案是递归分析$('body').contents(),直到获得足够的文本内容,但这似乎有些靠不住。也许有更好的办法吗?


注意:Chrome 扩展 API 允许您的脚本访问用户页面 DOM,就像它是其中的一部分。


有没有办法在Chrome扩展开发中使用Python可执行文件?如果可以,您可以使用sgmllib模块中的SGMLParser来实现!不太确定如何使用JS完成这个任务。 - Shiv Deepak
你对完整的网页HTML做什么? - kobe
6个回答

31

Javascript:

document.body.textContent

1
对我而言,在2021年使用Chrome,此方法不仅能提取文本,还可以在维基百科等网站上提取大量的CSS和代码。但是,document.body.innerText 方法的效果更加干净。 - Josh Desmond
以下是关于 innerTexttextContent 及其区别的一些信息:HTMLElement.innerTexttextContent 和 innerText 的区别 - mortalis

18
没有jQuery也同样简单:document.body.innerText;

8
针对IE浏览器,使用innerText;否则使用document.body.textContent。 - kennebec
根据PPK的说法,这两种方法都是跨浏览器的(Firefox中不存在innerText,IE中不存在textContent)。http://www.quirksmode.org/dom/w3c_html.html - pawel
2
它们是不同的:https://dev59.com/OnM_5IYBdhLWcg3wfTI0#1359822 - Tim Down
现在所有浏览器都已经实现了innerText。它运行良好,我强烈推荐使用。请访问https://caniuse.com/innertext。许多教程仍然过时并提到它的不兼容性,但是现在不再存在! - Josh Desmond

7

抱歉挑剔一下,但你需要使用:$('body').text() - szeryf

1

VanillaJS:

document.body.outerHTML


0
所有这些方法在使用Chrome控制台尝试时返回undefined。
var text = document.body.textContent;
var text = document.body.outerHTML;
var text = document.body.innerText;

等等...


语句本身 var text = document.body.innerText; 将返回 undefined,就像语句 var i = 5; 一样会返回 undefined。只需在控制台中键入 document.body.innerText,您将看到输出。 - Josh Desmond

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接