Selenium 两个具有相同 xpath 的按钮。无法点击我需要的那个

Selenium two buttons with same xpath. Unable to click the one I need

我正在测试的网页上有两个“导出”按钮。 我可以点击第一个使用:

driver.find_element_by_xpath("//button[contains(.//text(),'EXPORT')]").click()

然后驱动程序选择一个下拉菜单,然后出现另一个 div,同样带有一个导出按钮。

我的代码在尝试执行时出错:

driver.find_element_by_xpath("//button[contains(.//text(),'EXPORT')]").click()

这个元素是:

selenium.common.exceptions.ElementClickInterceptedException:消息:元素点击被拦截:元素 ... 在点 (1824, 89) 不可点击。其他元素将收到点击:... (会话信息:chrome=92.0.4515.107)

所以它说它无法点击第一个EXPORT按钮,而第二个可以点击。 我尝试将我的 xpath 表达式修改为:

driver.find_element_by_xpath("//button[class()='MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary' and (.//text(),'EXPORT')]").click()

以及其他一系列尝试,但每次都无法定位。我希望能够单击第二个导出按钮(在图片中显示的按钮 class 片段中)。

您可以在 xpath 索引的帮助下区分这两个 按钮

示例如下:-

(//span[text()='EXPORT']/..)[1]

第二个按钮:-

(//span[text()='EXPORT']/..)[2]

对于这个错误

selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element ... is not clickable at point (1824, 89). Other element would receive the click: ... (Session info: chrome=92.0.4515.107)

我建议您在启动时以全屏模式打开浏览器。

driver.maximize_window()

或者您也可以使用 ActionChain :-

from selenium.webdriver.common.action_chains import ActionChains
ActionChains(driver).move_to_element(driver.find_element(By.XPATH, "(//span[text()='EXPORT']/..)[2]")).click().perform()

更新 1 :-

您也可以使用 find_elements 存储所有网络元素,然后尝试单击您想要的元素。

all_export_button = driver.find_elements(By.XPATH, "//span[text()='EXPORT']/..")
#to click on first 
all_export_button[0].click()

#to click on Second 
all_export_button[1].click()