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

Selenium无ID时如何定位元素?booking.com非唯一类名元素定位问题

Selenium 无唯一标识元素定位解决方案(针对 booking.com 场景)

你当前编写的CSS选择器存在语法错误,data - filters - group 中间的多余空格会导致属性名匹配失败。data-filters-group 是业务专属的自定义属性,稳定性远高于动态生成的类名,修正语法后即可直接使用:

def apply_star_rating(self):
    star_filtration_box = self.driver.find_element_by_css_selector(
        'div[data-filters-group="class"]'
    )

如果担心后续页面调整导致该属性冲突,可使用以下更稳定的备选方案:

  • 方案1:层级组合定位缩小查找范围
    先定位到筛选侧边栏的父容器,再在父容器范围内查找目标元素,避免全局匹配出现冲突,booking 筛选侧边栏一般带有固定的 data-testid 属性,示例:
# 先定位筛选侧边栏父容器
filter_sidebar = self.driver.find_element_by_css_selector('div[data-testid="filters-sidebar"]')
# 再在侧边栏内精准查找星级筛选分组
star_filtration_box = filter_sidebar.find_element_by_css_selector('div[data-filters-group="class"]')
  • 方案2:XPath 文本匹配兜底
    如果后续属性被大范围调整,可通过筛选分组的可见文本定位,只要前端不修改展示文案就能生效,示例:
star_filtration_box = self.driver.find_element_by_xpath(
    '//*[contains(text(),"星级")]/following-sibling::div[contains(@data-filters-group,"class")]'
)

注意:不要使用 _962ef834c cbe47aa30e 这类随机字符串格式的类名做定位依据,这类是前端工程化构建时自动生成的哈希类名,每次版本发布都会变更,完全没有定位稳定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:54:04