You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium获取Discord消息返回空字符串问题求助

问题排查与解决思路

1. 元素定位准确性问题

你通过By.CLASS_NAME, "markup-eYLPri"获取的元素,大概率和JS定位的message-content-1008775068500893826元素并非同一层级或目标元素。Discord的消息DOM结构中,markup-eYLPri可能是文本容器的父/子元素,或者该类名对应多个元素,其中部分元素本身不包含文本内容。

建议直接通过ID定位目标元素验证:

target_message = browser.find_element(By.ID, "message-content-1008775068500893826")
print(target_message.get_property("textContent"))

如果能正常输出,说明之前的CLASS_NAME定位范围太宽泛,需要调整定位策略(比如结合父元素选择器、XPath等精准定位包含文本的元素)。

2. 元素加载时机问题

Selenium执行代码时,目标元素可能已被找到,但内部文本还未完全渲染完成,导致获取到空字符串。而你在浏览器控制台运行JS时,页面已经完全加载,所以能拿到文本。

可以添加显式等待,等待元素的文本内容非空:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待目标元素文本非空
wait = WebDriverWait(browser, 10)
target_message = wait.until(
    EC.text_to_be_present_in_element((By.ID, "message-content-1008775068500893826"), "")
)
print(target_message.get_property("textContent"))

或者等待元素可见后再操作:

target_message = wait.until(EC.visibility_of_element_located((By.ID, "message-content-1008775068500893826")))
print(target_message.text)

3. 直接执行JavaScript获取文本

既然浏览器中JS能正常获取内容,也可以在Selenium中直接执行这段JS来绕过元素属性获取的问题:

text = browser.execute_script('return document.getElementById("message-content-1008775068500893826").textContent;')
print(text)

内容的提问来源于stack exchange,提问作者Daniel Ivan Escobar Vasquez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:36:21