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
相关产品推荐
相关产品推荐

