Python Selenium:如何正确循环点击列表中的每个WebElement
问题原因
你的循环逻辑错误在于:
- 每次循环都用
find_element()(单数方法)重新获取元素,这个方法只会返回页面中匹配选择器的第一个元素,所以循环n次就会重复点击第一个元素。 - 循环里完全覆盖了
menu列表中的原有元素,等于白遍历了之前获取的menu列表。
修复方案
根据你的需求,分两种场景处理:
场景1:menu列表中的元素就是需要点击的目标
直接遍历menu列表,对每个元素执行点击:
menu = self.driver.find_elements(By.CSS_SELECTOR, '[class="partEl__1o8vO"]') for item in menu: item.click()
场景2:menu元素和需要点击的TableRow_clickableRow__1uMJO元素是关联关系(比如子元素、兄弟元素)
如果需要点击的元素是menu元素的子元素/兄弟元素,不要全局查找,而是通过当前menu元素定位,避免重复获取第一个元素:
menu = self.driver.find_elements(By.CSS_SELECTOR, '[class="partEl__1o8vO"]') for item in menu: # 以子元素为例,根据实际DOM结构调整选择器 target = item.find_element(By.CSS_SELECTOR, '.TableRow_clickableRow__1uMJO') target.click()
注意事项
- 点击后如果页面发生刷新/元素重新渲染,原
menu列表中的元素会失效,需要重新获取列表或者使用显式等待确保元素可交互。
内容的提问来源于stack exchange,提问作者Jin
相关产品推荐
相关产品推荐

