有没有办法从JS渲染页面获取所有文本?

Sta*_*kis 4 javascript text text-extraction

是否有(不显眼的,用户)方式使用Javascript获取页面中的所有文本?我可以获取HTML,解析它,删除所有标签等,但我想知道是否有办法从alread渲染页面获取文本.

为了澄清,我不想从选择中获取文本,我想要整个页面.

谢谢!

Max*_*nas 8

所有归功于Greg W的回答,因为我根据他的代码得出了这个答案,但我发现对于没有内联样式或脚本标签的网站,它通常更简单易用:

var theText = $('body').text();
Run Code Online (Sandbox Code Playgroud)

因为这会抓取所有标签中的所有文本,而无需手动设置可能包含文本的每个标签.

此外,如果您不小心,手动设置标签有倾向于在输出中创建重复文本,因为每个函数通常必须检查其他标记中包含的标记,这导致它抓取相同的文本两次.使用一个包含我们想要抓取文本的所有标记的选择器可以解决这个问题.

需要注意的是,如果body标签中有内联样式或脚本标签,它也会抓住它们.

更新:

在阅读了这篇文章之后,innerText我现在认为获取文本的绝对最佳方式是普通的ol vanilla js:

document.body.innerText
Run Code Online (Sandbox Code Playgroud)

这是不可靠的跨浏览器,但在受控环境中它会返回最佳结果.阅读文章了解更多详情.

此方法以通常更易读的方式格式化文本,并且包括输出中的样式或脚本标记内容.


Gre*_*g W 5

我想如果你不介意加载 jQuery,你可以做这样的事情。

var theText;
$('p,h1,h2,h3,h4,h5').each(function(){
  theText += $(this).text();
});
Run Code Online (Sandbox Code Playgroud)

全部完成后,“theText”应该包含页面上的大部分文本。添加我可能遗漏的任何相关选择器。