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

使用Selenium通过data-testid属性定位元素遇问题求助

问题分析与修复代码

原代码存在的问题

  • 循环内重复创建DataFrame,完全没必要且浪费资源
  • 用desc[i].text而非enumerate给出的cp,冗余又不直观
  • splitted[0:1]返回的是列表,转字符串后会保留[]格式,不符合提取纯文本的预期
  • 未处理元素未加载的情况,大概率会因为页面没渲染完导致desc为空列表
  • 多余的分号不符合Python编码习惯

修复后的代码

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd

desc_list = []

# 显式等待元素加载,避免因页面未渲染导致的空列表
wait = WebDriverWait(driver, 10)
desc = wait.until(EC.presence_of_all_elements_located((By.XPATH, "//div[@data-testid='sl.explore.card-description']")))

for cp in desc:
    text_content = cp.text.strip()
    if text_content:  # 跳过空文本的元素
        splitted = text_content.split('\n')
        # 直接取第一行内容,而非转成带括号的列表字符串
        data_desc = splitted[0] if splitted else ""
        desc_list.append(data_desc)

# 循环结束后统一创建DataFrame,提升效率
df_desc = pd.DataFrame(desc_list, columns=['card_description'])

关键优化点

  • 加入显式等待,确保目标元素完全渲染后再获取,解决最常见的元素找不到问题
  • 直接遍历元素而非通过索引取值,代码更简洁易读
  • 处理空文本、空列表的边界情况,避免运行时报错
  • 把DataFrame创建移到循环外,减少不必要的内存开销
  • 移除多余分号,贴合Python编码规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 13:14:58