python - 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()
理想情况下,要单击需要诱导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
推荐阅读
- tcl - 如何避免不正确的变量?
- machine-learning - 对展开的时间步进行切片 StandardScaler
- validation - .Net Core 更改密码验证器
- elasticsearch - 向映射添加属性是否需要重新索引?
- asp.net-mvc - Azure Active Directory 和单点登录的访问令牌
- mongodb - Mongo查询最小值最大值不包括匹配条件
- robotframework - 是否有任何关键字可以充当“等待关键字成功”?
- github - Github 上的 Markdown:如何在代码块内使用斜体(三个反引号)
- sql-server - 根据日期对列求和
- java - pkcs11异常解析配置:Unexpected value Token['(']