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

使用Python Selenium获取React-text包裹的电话号码失败求助

解决Selenium提取React渲染电话号码的问题

嘿,我懂你碰到的这个小麻烦了——React生成的DOM里有时候会带这种<!-- react-text -->注释标记,确实会让直接提取文本的操作偶尔失效。不过别慌,这里有几个实用的方案帮你拿到那个电话号码:

方案1:从href属性提取(最稳定)

这个方法完全不受React注释的影响,因为tel:链接里已经包含了完整的数字,我们只需要把它格式化一下就行:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
# 假设你已经导航到目标页面

# 先显式等待元素加载完成,避免因元素未渲染导致的问题
wait = WebDriverWait(driver, 10)
phone_element = wait.until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "a._2sNbI.ObuDQ.GXQkc._2BP2c"))
)

# 提取href属性中的tel链接
tel_value = phone_element.get_attribute("href")
# 去除前缀并格式化电话号码
raw_phone = tel_value.replace("tel:", "")
formatted_phone = " ".join([raw_phone[i:i+2] for i in range(0, len(raw_phone), 2)])

print(formatted_phone)  # 输出:04 81 68 30 45

方案2:强制获取元素文本内容

如果一定要直接提取页面显示的文本,可以尝试用innerText属性或者通过JavaScript获取textContent,这两种方法比Selenium默认的element.text更不容易受React渲染机制影响:

# 接上面的等待代码,获取元素后:

# 方法A:使用innerText属性
phone_text = phone_element.get_attribute("innerText")
print(phone_text)

# 方法B:通过执行JS获取textContent
phone_text = driver.execute_script("return arguments[0].textContent.trim();", phone_element)
print(phone_text)

为什么之前的代码会返回空?

大概率是元素未完全渲染就尝试提取文本了——React需要时间把虚拟DOM转换成真实DOM内容。所以一定要加上显式等待(就是上面代码里的WebDriverWait),确保元素已经出现在DOM中再进行操作,而不是直接用find_element硬找。

内容的提问来源于stack exchange,提问作者Nhat Tai NGUYEN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:50:36