首页 > 解决方案 > XPATH 正在改变

问题描述

我正在使用 Python 3 和 Selenium(Chromedriver)。我想用这个命令检查一个元素。

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[3]/div/div[6]/div[2]/div[2]/div/form/div[2]/div[5]/div/div/div/div[2]/button"))).click()

问题是 XPATH 在两条路径之间不断变化:

/html/body/div[3]/div/div[6]/div[2]/div[2]/div/form/div[2]/div[5]/div/div/div/div[2]/button
/html/body/div[3]/div/div[3]/div[2]/div[2]/div/form/div[2]/div[5]/div/div/div/div[2]/button

我想告诉 Python,如果找不到该元素,它应该搜索另一个 XPATH。

如果您知道一种无需 XPATH 即可找到元素的方法,我也会对该解决方案感到满意。如果您通过其包含的文本搜索元素,则它不起作用,因为如果使用代理,来自站点的语言会发生变化。这是按钮的“检查元素”代码:

<button aria-label="Mobilnummer hinzufügen" class="bg-white css-1eajgu7 ex41m6f0 btn-secondary-dark " type="button">Hinzufügen</button>

标签: pythonseleniumxpathcss-selectorswebdriverwait

解决方案


要单击文本为Hinzufügen的元素,您可以使用以下任一Locator Strategies

  • 使用css_selector

    driver.find_element_by_css_selector("button.bg-white.btn-secondary-dark[aria-label='Mobilnummer hinzufügen']").click()
    
  • 使用xpath

    driver.find_element_by_xpath("//button[@aria-label='Mobilnummer hinzufügen' and text()='Hinzufügen']").click()
    

理想情况下,要单击需要诱导WebDriverWait的元素element_to_be_clickable(),您可以使用以下任一Locator Strategies

  • 使用CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.bg-white.btn-secondary-dark[aria-label='Mobilnummer hinzufügen']"))).click()
    
  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@aria-label='Mobilnummer hinzufügen' and text()='Hinzufügen']))).click()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

推荐阅读