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

Selenium指定WebElement内starts-with查找元素时搜索范围为全页面

问题根因

两个异常/不符合预期的表现都来自选择器的使用误区:

  • By.CLASS_NAME 定位报错:该定位方式底层会自动拼接为CSS类选择器格式(即报错信息中展示的.类名形式),而CSS语法中+是相邻兄弟选择器的专用语法符号,不属于可直接出现在类选择器中的普通字符,传入带+的类名会被解析为CSS语法片段,直接触发无效选择器异常。
  • XPath匹配范围覆盖全页面:XPath语法规则中,以//开头的路径代表从整个HTML文档根节点开始全局检索,和调用查找方法的WebElement上下文无关,因此会返回全页面所有匹配的20个元素,不会限定在one_row的子树范围内。另外你的代码存在一处笔误:需要获取多个匹配元素时要调用find_elements(方法名带s),find_element仅会返回第一个匹配的单个元素,直接对单个元素调用len()会触发类型错误。
修复方法

方法1:修正XPath语法限定查找范围

在XPath路径开头增加.,代表以当前调用方法的WebElement作为检索起点,即可将查找范围限定在one_row内部,同时修正方法名为find_elements获取元素列表:

# 注意XPath前缀为.// 而非//,使用find_elements获取多结果
tags_and_marketplace_section = one_row.find_elements(
    by=By.XPATH,
    value='.//div[starts-with(@class, "market-watcher-")]'
)
print(len(tags_and_marketplace_section))
# 预期输出为one_row范围内的匹配元素数:2

方法2:使用CSS属性选择器匹配带特殊字符的完整类名

如果需要精确匹配带特殊字符的完整类名,不要使用By.CLASS_NAME,改用By.CSS_SELECTOR编写属性选择器即可,无需手动转义特殊字符:

tags_and_marketplace_section = one_row.find_element(
    by=By.CSS_SELECTOR,
    value='div[class="market-watcher-title_os_button_container__4-yG+"]'
)

内容的提问来源于stack exchange,提问作者Mehmet Güneş

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:51:26