Python Selenium嵌套元素解析问题:获取属性值与文本内容
Python Selenium解析嵌套元素问题解决方案
1. 解决ul#facetUE下li元素data-val属性获取无结果的问题
大概率是元素未完全加载就开始定位,或者定位逻辑有问题。用显式等待确保元素加载完成,再通过get_attribute("data-val")提取属性:
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() driver.get("https://www.nepremicnine.net/oglasi-prodaja/gorenjska/stanovanje/") # 等待目标ul元素加载完成 wait = WebDriverWait(driver, 10) facet_list = wait.until(EC.presence_of_element_located((By.ID, "facetUE"))) # 获取所有li子元素 li_items = facet_list.find_elements(By.TAG_NAME, "li") # 提取有效data-val值 data_val_list = [li.get_attribute("data-val") for li in li_items if li.get_attribute("data-val")] print(data_val_list)
2. 解决.text()触发TypeError的问题
Selenium元素的文本是属性text,不是方法,不能加括号()。要提取div中[]内的数字,配合正则表达式匹配即可:
import re # 指定目标data-val值 target_val = "54" target_item = next((li for li in li_items if li.get_attribute("data-val") == target_val), None) if target_item: # 获取a标签内的城市名称 city = target_item.find_element(By.TAG_NAME, "a").text print(f"城市名称:{city}") # 提取div中[]内的数字 div_content = target_item.find_element(By.TAG_NAME, "div").text num_result = re.search(r"\[(\d+)\]", div_content) if num_result: count = num_result.group(1) print(f"数量:{count}")
额外提示
- 如果元素在页面下方未显示,可先滚动到目标元素位置:
driver.execute_script("arguments[0].scrollIntoView();", facet_list) - 检查页面是否存在iframe,若有需先切换到对应iframe再定位元素:
driver.switch_to.frame("iframe_name_or_id")
内容的提问来源于stack exchange,提问作者Rok Golob
相关产品推荐
相关产品推荐

