Selenium无法定位按钮

rjee0c15  于 2023-01-30  发布在  其他
关注(0)|答案(2)|浏览(200)

我正在尝试使用Selenium在Python中点击一个网站上的按钮。html看起来像这样:

<a class="btn btn-default btn-lg primary-light-blue-btn" onclick="createReport()">Create report</a>

我曾尝试使用:

l = driver.find_element(By.XPATH, "//button[@class='btn btn-default btn-lg primary-light-blue-btn']")

但我得到的错误:

NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//button[@class='btn btn-default btn-lg primary-light-blue-btn']"}

我也试过其他方法,但就是找不到按钮。

l = driver.find_element(By.XPATH, "//button[text()='Create report']")

我也尝试过引入等待,但这没有帮助,例如:

l = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//button[text()='Create report']")))
but5z9lq

but5z9lq1#

将标记//button更改为//a

l = driver.find_element(By.XPATH, "//a[@class='btn btn-default btn-lg primary-light-blue-btn']")
lrpiutwd

lrpiutwd2#

根据给定的HTML:

<a class="btn btn-default btn-lg primary-light-blue-btn" onclick="createReport()">Create report</a>

元素是<a>标记。
溶液
要单击文本为***Create report***的元素,可以使用以下locator strategies之一:

  • 使用 * 链接文本 *:
driver.find_element(By.LINK_TEXT, "Create report").click()
  • 使用 * css_selector *:
driver.find_element(By.CSS_SELECTOR, "a.btn.btn-default.btn-lg.primary-light-blue-btn[onclick^='createReport']").click()
  • 使用 * xpath *:
driver.find_element(By.XPATH, "//a[@class='btn btn-default btn-lg primary-light-blue-btn' and starts-with(@onclick, 'createReport')]").click()

理想情况下,要单击***clickable***元素,需要为element_to_be_clickable()引入WebDriverWait,可以使用以下locator strategies之一:

  • 使用 * 链接文本 *:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "Create report"))).click()
  • 使用 * CSS选择器 *:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.btn.btn-default.btn-lg.primary-light-blue-btn[onclick^='createReport']"))).click()
  • 使用 * XPATH *:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='btn btn-default btn-lg primary-light-blue-btn' and starts-with(@onclick, 'createReport')]"))).click()
      • 注意**:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

相关问题