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>

解决方法

要单击文本为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()
    

理想情况下,要单击element_to_be_clickable()的{​​{3}}元素,可以使用以下WebDriverWait之一:

  • 使用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
    
,

尝试使用此XPath:

//div[contains(@class,'mex-mobile-phone')]//button[contains(@class,'btn-secondary-dark')]

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...