问题描述
我正在使用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')]