如何逐个点击所有匹配指定CSS选择器的Selenium页面元素?
问题解决方案
错误原因
find_elements_by_css_selector()方法返回的是符合匹配规则的WebElement元素列表,列表本身没有click()方法,所以原有代码无法运行,也实现不了逐个点击的需求。
基础实现(点击后页面无刷新/跳转场景)
遍历获取到的元素列表,对每个单独的元素调用点击方法即可:
# 获取所有匹配的单选菜单项元素 menu_radio_items = self.driver.find_elements_by_css_selector('div[role="menuitemradio"]') # 逐个点击 for radio_item in menu_radio_items: radio_item.click()
兼容场景(点击后页面刷新/元素重新渲染场景)
如果点击任意元素后页面会刷新、或者元素列表会重新渲染,之前拿到的元素引用会失效报错,需要每次点击前重新获取元素列表:
# 先获取元素总数量 item_total = len(self.driver.find_elements_by_css_selector('div[role="menuitemradio"]')) for index in range(item_total): # 每次重新获取列表,取对应下标的元素 target_item = self.driver.find_elements_by_css_selector('div[role="menuitemradio"]')[index] target_item.click() # 若点击后有加载等待,可按需添加等待逻辑
可选优化
如果元素存在未加载完成、被遮挡等不可点击的情况,可以在点击前增加显式等待判断,确保元素可交互后再执行点击操作,避免触发异常。
内容的提问来源于stack exchange,提问作者Jhon tech
相关产品推荐
相关产品推荐

