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

如何将Selenium获取的WebElement多行文本文本拆分赋值并解决元素提取异常

解决方案

你之前遇到的AttributeError: 'Webelement' object has no attribute 'split'错误,是因为elem是Selenium返回的WebElement对象,不是字符串,需要先调用它的.text属性拿到文本内容后,再做拆分操作。

1 多行文本批量拆分赋值实现

你打印的elem.text本身是键:值格式的多行文本,直接解析为字典调用更简洁,不需要单独声明大量变量,实现代码如下:

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

def get_lawis_data():
    # 等待列表条目可点击后进入详情
    WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, '/html/body/div/main/div[2]/div[2]/div[1]/table/tbody/tr[1]'))
    ).click()
    # 等待信息tab可点击后切换
    WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, '//*[@id="tab_info"]'))
    ).click()
    # 核心:等待信息区块完整加载,避免拿到空内容/不完整内容
    accordion_content = WebDriverWait(driver, 10).until(
        EC.visibility_of_element_located((By.XPATH, '//*[@class="accordion-content"]'))
    )
    # 先取文本再按行拆分
    line_list = accordion_content.text.strip().split('\n')
    # 统一解析为字典,自动对应字段
    res_dict = {}
    for line in line_list:
        if ':' not in line:
            continue
        # 只拆分第一个冒号,避免值内容中包含冒号导致解析错误
        key_raw, value = line.split(':', 1)
        # 统一键名格式,替换空格为下划线,方便后续调用
        key = key_raw.strip().replace(' ', '_').lower()
        res_dict[key] = value.strip()
    return res_dict

# 调用后直接按字段名取值即可
data = get_lawis_data()
Observation_date = data.get('observation_date')
Reporting_date = data.get('reporting_date')
Name = data.get('name')
# 其余字段直接从res_dict中对应key取值即可

2 稳定提取元素的规范方案

不需要为每个字段单独加等待,用以下方案即可大幅降低加载速度导致的提取失败概率:

  • 优先等待父容器加载:只需要先等accordion-content这个父容器可见,再做内容解析,即可保证子字段都已加载完成,比每个字段单独加等待的代码更简洁,效率也更高
  • 替换不稳定的定位方式:尽量避免用/html/body/...这类绝对路径定位,页面结构稍有调整就会失效,建议优先用By.ID、By.CLASS_NAME或者带固定属性的相对XPath做定位
  • 选择匹配场景的等待条件:对于不需要点击的纯展示文本内容,用visibility_of_element_located(判断元素可见)或者presence_of_element_located(判断元素存在于DOM)等待更合适,不需要用element_to_be_clickable
  • 增加简单校验逻辑:解析完成后可以判断核心字段(比如观测时间、上报时间)是否为空,如果为空可加入重试逻辑,覆盖偶发的内容加载异常场景

内容的提问来源于stack exchange,提问作者Andy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:54:02