使用 Selenium Python 单击元素时出错

问题描述 投票:0回答:2

我正在尝试点击“付款”图标,但我无法使用 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()

快照:

enter image description here

python selenium-webdriver xpath css-selectors
2个回答
0
投票

所需的元素是动态元素,因此要单击 Make a payment 元素,您需要为 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
    

0
投票

您使用的 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()
© www.soinside.com 2019 - 2024. All rights reserved.