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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 11:44:54