如何使用Python Selenium依次点击同类别名的按钮?
如何依次点击两个类名相同的按钮?
你当前的代码问题在于,每次用EC.presence_of_element_located只会定位到第一个匹配的按钮元素,所以两次执行的都是点击同一个按钮,达不到依次点击两个不同按钮的目的。下面根据两种常见场景给出解决方案:
场景1:页面上同时存在两个相同类名的按钮
如果页面加载完成后就有两个applyBtn btn btn-sm btn-red类的按钮,可以先获取所有匹配的元素,再按索引依次点击:
# 等待所有符合条件的按钮加载完成 all_apply_buttons = wait(driver, 10).until(EC.presence_of_all_elements_located((By.XPATH, "//button[@class='applyBtn btn btn-sm btn-red']"))) # 点击第一个按钮 driver.execute_script("arguments[0].click();", all_apply_buttons[0]) # 点击第二个按钮 driver.execute_script("arguments[0].click();", all_apply_buttons[1])
注意:索引从0开始,确保页面上确实存在至少两个匹配的元素,否则会抛出索引越界错误。
场景2:点击第一个按钮后才出现第二个按钮
如果是点击第一个按钮后,页面才动态加载出第二个相同类名的按钮,那么需要分两次等待定位,每次点击后等待新的按钮出现:
# 点击第一个按钮(用element_to_be_clickable确保元素可点击) clk_but1 = wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='applyBtn btn btn-sm btn-red']"))) driver.execute_script("arguments[0].click();", clk_but1) # 等待第一个按钮失效,确保页面状态更新(可选但推荐) wait(driver, 10).until(EC.staleness_of(clk_but1)) # 定位并点击第二个按钮 clk_but2 = wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='applyBtn btn btn-sm btn-red']"))) driver.execute_script("arguments[0].click();", clk_but2)
另外,你的XPATH写法里,@class = ('applyBtn btn btn-sm btn-red')的括号是多余的,可以简化成@class='applyBtn btn btn-sm btn-red',这样更规范。
内容的提问来源于stack exchange,提问作者Usman_Ahmed
相关产品推荐
相关产品推荐

