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

如何用Selenium Python提取HTML容器中的指定文本?

问题:提取Facebook消息容器中的文本内容

获取消息容器的代码

messages_blocks = driver.find_elements(By.CLASS_NAME, "x1fqp7bg")

容器的HTML结构

<div class="xeuugli x2lwn1j xuk3077 x78zum5 x1q0g3np x1nhvcw1 x1jchvi3 xlxfd2w x1gslohp x126k92a"><div class="x1rg5ohu x67bb7w"><img class="x6umtig x1b1mbwd xaqea5y xav7gou x14yjl9h xudhj91 x18nykt9 xww2gxu x1ypdohk x1lliihq img" alt="Manuel Marchie" src="https://scontent-vie1-1.xx.fbcdn.net/v/t1.30497-1/84628273_176159830277856_972693363922829312_n.jpg?stp=c59.0.200.200a_dst-jpg_p200x200&amp;_nc_cat=1&amp;ccb=1-7&amp;_nc_sid=12b3be&amp;_nc_ohc=O7CR_V32jMkAX-d2qoC&amp;_nc_ht=scontent-vie1-1.xx&amp;oh=00_AfCWMM9EsteVjxrm3mKJ4Qo-tRDbpMOHRYyY53yuob1TWQ&amp;oe=64D74E19" width="32" height="32"></div><div class="xeuugli x2lwn1j x6s0dn4 x78zum5 x1q0g3np x193iq5w xh8yej3"><div class="xeuugli x2lwn1j x1cy8zhl x78zum5 xdl72j9 xdt5ytf x1c4vz4f x2lah0s x16fdfms x161msgk x1s9ed0f x1eapu41 x1r944mn xet2fuk"><div class="x1rg5ohu x67bb7w"><div class="x1y1aw1k xn6708d xwib8y2 x1ye3gou x13faqbe x1eied1y xca6lcq x1pdtjp8 xpctjk2 xogfrqt x1slwz57 xt0e3qv"><span><span>yeah yeah yeah</span></span></div></div></div><div class=""></div></div> <img alt="Gesehen von Manuel Marchie – 14:41" class="x6umtig x1b1mbwd xaqea5y xav7gou x14yjl9h xudhj91 x18nykt9 xww2gxu xjpr12u x10l6tqk xlftelb img" title="Gesehen von Manuel Marchie – 14:41" src="https://scontent-vie1-1.xx.fbcdn.net/v/t1.30497-1/84628273_176159830277856_972693363922829312_n.jpg?stp=c59.0.200.200a_dst-jpg_p200x200&amp;_nc_cat=1&amp;ccb=1-7&amp;_nc_sid=12b3be&amp;_nc_ohc=O7CR_V32jMkAX-d2qoC&amp;_nc_ht=scontent-vie1-1.xx&amp;oh=00_AfCWMM9EsteVjxrm3mKJ4Qo-tRDbpMOHRYyY53yuob1TWQ&amp;oe=64D74E19" width="15" height="15"> </div><div class="xeuugli x2lwn1j x78zum5 x1nhvcw1"></div>

我的尝试(未成功)

messages : list[str] = []
for message_block in message_blocks:
    messages.append(message_block.find_element(By.CLASS_NAME, "(don't now what comes here)"))

解决方案

Facebook的动态类名频繁变动,直接依赖类名定位容易失效,推荐以下几种可行方法:

方法1:精准定位文本所在元素

通过XPath直接定位包含文本的嵌套元素:

messages = []
for message_block in message_blocks:
    text_elem = message_block.find_element(By.XPATH, ".//div[@class='x1y1aw1k xn6708d xwib8y2 x1ye3gou x13faqbe x1eied1y xca6lcq x1pdtjp8 xpctjk2 xogfrqt x1slwz57 xt0e3qv']/span/span")
    messages.append(text_elem.text)

方法2:简化层级定位

如果类名仍不稳定,可通过DOM层级关系定位,避免依赖完整类名:

messages = []
for message_block in message_blocks:
    # 定位消息块内第二个div分支下的最内层span
    text_elem = message_block.find_element(By.XPATH, ".//div[2]//span[last()]")
    messages.append(text_elem.text)

方法3:提取并过滤纯文本

直接获取消息块的全部文本,再过滤掉头像名称、已读提示等冗余内容:

messages = []
for message_block in message_blocks:
    full_text = message_block.text
    # 过滤已知冗余内容,提取核心消息文本
    message_text = [line for line in full_text.split('\n') if line not in ["Manuel Marchie", "Gesehen von Manuel Marchie – 14:41"]][0]
    messages.append(message_text)

内容的提问来源于stack exchange,提问作者Olmiϟ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:55:03