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
相关产品推荐
相关产品推荐

