复制xpath不能提供正确的xpath?

时间:2019-07-31 20:02:00

标签: python selenium selenium-webdriver xpath webdriverwait

我一直在尝试使用python中的硒包单击按钮。不过,我一直在弄不清楚如何识别按钮。经过太多时间后,我尝试从javascript控制台手动复制xpath,但是在尝试调用NoSuchElementException时得到driver.find_element_from_xpath('<xpath>')

我真的不确定这怎么可能。 HTML非常长-我最终试图定位的内容嵌套在多个表,正文,td,tr标签下。这是元素:

<a href="Javascript:void" onclick="javascript:toggleDisplay(this, trAK);return false;">Alaska</a>

当我在Chrome中单击“复制Xpath”时,它返回了以下字符串://*[@id="Form1"]/table/tbody/tr[3]/td/table/tbody/tr[1]/td/table/tbody/tr/td/table/tbody/tr[2]/td/table/tbody/tr[5]/td/table/tbody/tr[3]/td/table[1]/tbody/tr[1]/td[2]/a

我对此很陌生,所以谁能帮助我了解为什么这不起作用和/或我可以做些什么来解决?

1 个答案:

答案 0 :(得分:0)

所需元素是启用了JavaScript的元素,因此要对元素click()使用element_to_be_clickable(),必须为LINK_TEXT引入 WebDriverWait ,并且可以使用以下Locator Strategies

  • 使用WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "Alaska"))).click()

    XPATH
  • 使用(逻辑)WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[contains(@onclick, 'toggleDisplay') and text()='Alaska']"))).click() (而不是绝对xpath):

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 注意:您必须添加以下导入:

    {{1}}