Python+Selenium如何定位文本内容动态变化的HTML元素
可行的定位方案
按稳定性从高到低给出以下可直接复用的方案:
方案1:使用class属性组合定位
目标元素有两个明确的class值,用CSS选择器同时匹配两个类可以最大程度避免误匹配,代码如下:
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() # 定位元素 target_ele = driver.find_element(By.CSS_SELECTOR, 'div.sc-gtsrHT.jFEWVt') # 读取文本 text_content = target_ele.text print(text_content)
注意:如果后续页面更新后该方法失效,大概率是这类sc开头的class是前端框架自动生成的动态类,可切换到方案2。
方案2:使用自定义属性组合定位
该元素的font-size和color是自定义属性,组合匹配的稳定性更高,不会随前端打包规则变更:
# 同时匹配div标签、font-size属性和color属性 target_ele = driver.find_element(By.CSS_SELECTOR, 'div[font-size="14px"][color="text"]') text_content = target_ele.text
方案3:层级辅助定位
如果页面上同时存在多个符合上述属性的元素,可以先定位到该元素固定的父容器,再向下查找目标元素,比如假设该元素的父元素是id为result-box的div,代码如下:
parent_ele = driver.find_element(By.ID, 'result-box') target_ele = parent_ele.find_element(By.CSS_SELECTOR, 'div[font-size="14px"][color="text"]')
额外优化建议
如果元素是动态加载的,可加入显式等待避免出现元素未加载的报错:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 最长等待10秒,直到元素加载完成 wait = WebDriverWait(driver, 10) target_ele = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'div.sc-gtsrHT.jFEWVt'))) text_content = target_ele.text
内容的提问来源于stack exchange,提问作者just_a_coding_dude
相关产品推荐
相关产品推荐

