Selenium获取含固定属性div元素文本失败的求助
解决方法:抓取带固定data-v属性的div文本
原代码问题分析
- 绝对XPATH太脆弱:你用的
/html/body/...这种绝对路径,只要页面结构有一点变化(比如新增/删除一个层级),定位就会失效。 - 列表不能直接调用.text:
presence_of_all_elements_located返回的是元素列表,直接.text会抛出错误,必须遍历列表或者定位单个元素。 - 可能元素未完全渲染:
presence_of_all_elements_located只判断元素在DOM中存在,不保证可见,用visibility_of_element_located更适合需要获取文本的场景。
可行方案
方案1:批量获取所有目标div的文本
利用固定的data-v-a5b90146属性结合class,用CSS选择器定位更精准:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待所有符合条件的div加载并可见 div_list = WebDriverWait(driver, 10).until( EC.visibility_of_all_elements_located((By.CSS_SELECTOR, 'div[data-v-a5b90146].html-content')) ) # 遍历提取每个div的文本 for div in div_list: print(div.text.strip()) # 去除多余空格
方案2:精准定位带标签的目标文本
如果只需要抓取<b> TEXT WANTED </b>这段内容,用相对XPATH结合属性定位:
target_text = WebDriverWait(driver, 10).until( EC.visibility_of_element_located((By.XPATH, '//div[@data-v-a5b90146 and @class="html-content"]/b')) ).text.strip() print(target_text)
额外提示
- 优先用CSS选择器或相对XPATH,避免绝对路径,提升代码稳定性。
- 如果文本在iframe里,需要先切换到iframe再定位元素。
- 检查元素是否被隐藏(比如display:none),这种情况
visibility_of_element_located会超时,需要用presence_of_element_located再判断文本是否存在。
内容的提问来源于stack exchange,提问作者Silvio Duarte
相关产品推荐
相关产品推荐

