我正在尝试点击“付款”图标,但我无法使用 XPath 点击它。
我用过:
driver.find_element_by_xpath("//div[@class='a11y appmagic-button-busy']//button[@class='appmagic-button-container no-focus-outline' and @title='Click here to make a payment']").click()
快照:
所需的元素是动态元素,因此要单击 元素,您需要为 element_to_be_clickable() 引入 WebDriverWait 并且您可以使用以下任一 定位器策略:
使用CSS_SELECTOR:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.appmagic-button-container.no-focus-outline[title='Click here to make a payment']"))).click()
使用XPATH:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='appmagic-button-container no-focus-outline' and @title='Click here to make a payment']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
您使用的 XPath 的问题是它正在寻找一个 BUTTON,它是 DIV 的*后代*,但该 DIV 实际上是所需 BUTTON 的兄弟。
鉴于您发布的 HTML,如果您只删除 XPath 的 DIV 部分,其余部分应该可以工作。
driver.find_element(By.XPATH, "//button[@class='appmagic-button-container no-focus-outline' and @title='Click here to make a payment']").click()
话虽如此,像这样的 XPaths 存在问题。 @class 必须是完全匹配的字符串,因此如果将不同的类添加到该元素或更改类的顺序,则 XPath 将不再找到该元素。在这种情况下,你最好使用像
这样的 CSS 选择器driver.find_element(By.CSS_SELECTOR, "button.appmagic-button-container.no-focus-outline[title='Click here to make a payment']").click()
或者您可以将其进一步简化为
driver.find_element(By.CSS_SELECTOR, "button[title='Click here to make a payment']").click()