如何使用javascript和document.querySelector从Discord频道中的最新帖子中提取文本?

如何使用javascript和document.querySelector从Discord频道中的最新帖子中提取文本?,javascript,html,text,extract,Javascript,Html,Text,Extract,事实证明,使用javascript和“document.querySelector”成功识别和提取Discord频道上最后一条消息的文本是困难的。我在其他网站上成功地使用了:last child,例如: document.querySelector(“container:last-child”).innerContent 然而,这似乎不适用于不和谐的频道。他们的数据结构为嵌套的.div元素(而不是我过去成功使用的列表)。下面是不和谐结构的一个示例: <div class="sc

事实证明,使用javascript和“document.querySelector”成功识别和提取Discord频道上最后一条消息的文本是困难的。我在其他网站上成功地使用了:last child,例如:

document.querySelector(“container:last-child”).innerContent
然而,这似乎不适用于不和谐的频道。他们的数据结构为嵌套的.div元素(而不是我过去成功使用的列表)。下面是不和谐结构的一个示例:

<div class="scrollerInner-2YIMLh" aria-label="Messages in Since it looks like the last element is followed by

<div class="scrollerSpacer-XXXXXX"><div>

因为最后一个元素后面跟


伪选择器:最后一个子项应用于它所附加到的元素。在本例中,您选择的是最后一个
.scrolleriner-XXXXX
div,它是其父元素的子元素,而不是最后一个
.message-XXXXX

但是,由于
.message-XXXXX
元素不是
.scrolleriner-XXXXX
元素的最后一个子元素,因此不能使用
:last child
。您必须使用
:类型的最后一个

总之,您希望查询
.scrolleriner-XXXXX.message-XXXXX:last of type

document.querySelector('.scrolleriner-XXXXX.message-XXXXX:类型的最后一个');
这假设每条消息的
.message-XXXXX
都是相同的


否则,您将需要获取
.scrolleriner-XXXXX
的子级并按类名对其进行筛选,然后获取最后一个

const scrollerinerchildren=Array.from(document.querySelector('.scrolleriner-XXXXX').children);
const hasMessagesFilter=child=>Array.from(child.classList).some(cl=>cl.startsWith('message-');
const childrenWithMessages=scrollerinerchildren.filter(hassmessagesfilter);
const{length}=childrenWithMessages;
const lastMessageElement=childrenWithMessages[length-1];

这是一个非常巧妙的想法。不管出于什么原因,它仍然没有为我返回任何数据。按“运行代码片段”查看答案中的代码是否正常工作。如果它在您的实际应用程序中不起作用,那么HTML结构与您的问题中的结构不同。请编辑您的问题,以包括实际的HTML结构逐字。你是对的-我得到的结构有点错误。我在我原来的帖子中添加了额外的细节。我可以一字不差地复制整个html块,但它会非常非常长。我试着缩写一下。如果你喜欢整件事,请告诉我。无论如何,我仍然无法让脚本获取内部文本。非常感谢您的关注。我编辑了问题中的代码片段以更改为新的HTML,答案中提供的代码仍然有效,您可以通过按Run code snippet看到这一点。谢谢。我肯定在片段中看到了它的作用。虽然很奇怪,但当我在fiddle中运行它时,它似乎想要抓住它的内容。当我删除该元素时,它运行良好。好奇。谢谢,这很有道理。“消息”字段在所有条目中都是常量,是的。然而,它有一个奇怪的结构,我没有把它放在我原来的帖子里。我已经用额外的细节更新了帖子。消息标识符是这样的:“‘message-2qnXI6 cozyMessage-3V1Y8y wrapper-2a6GCs cozy-3raOZG zalgo-jN1Ica’不确定如何处理其中的空间。我用“类型的最后一个”选择器尝试了你的脚本,但不幸的是,它对Discord无效。就像@CertainPerformance的解决方案一样,它似乎也从中获取了文本。我没有准确地抄写的真实代码中一定有一些差异。我应该发布真实的东西吗?它相当大。但是,当我在我的结构示例中尝试这一点时,它是有效的,但在真正的代码中不起作用。