Selenium中如何通过span类名点击匹配元素列表的第二或第三个项
你之前写法失效的核心原因是,Chropath显示的xpath="N"属性是调试工具自行添加的标注,不属于Gmail页面原生DOM属性,因此无法通过该属性定位到目标元素。
方案1:直接通过XPath索引定位
XPath的节点索引从1开始,给匹配的元素集加括号后指定索引即可定位到对应位置的邮件,第二封邮件的定位写法如下:
self.driver.find_element_by_xpath("(//span[@class='bog'])[2]").click()
需要点击第N封邮件时,把括号内的数字替换为N即可。
方案2:先获取全部匹配元素再按索引取值
先通过复数元素查询方法拿到所有符合条件的邮件元素列表,Python列表索引从0开始,因此取索引1即为第二封邮件:
# 获取所有class为bog的邮件元素列表 email_elements = self.driver.find_elements_by_xpath("//span[@class='bog']") # 点击第二封邮件 email_elements[1].click()
稳定性优化建议
为了避免页面未加载完成导致的定位报错,建议添加显式等待逻辑:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 最多等待10秒,直到第二封邮件可点击后再执行点击操作 second_email = WebDriverWait(self.driver, 10).until( EC.element_to_be_clickable((By.XPATH, "(//span[@class='bog'])[2]")) ) second_email.click()
内容的提问来源于stack exchange,提问作者Dilshan
相关产品推荐
相关产品推荐

