复制xpath不提供正确的xpath?

2024-04-25 08:57:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试使用python中的selenium包单击一个按钮。不过,我一直不知道如何识别按钮。在花了太多时间之后,我尝试从javascript控制台手动复制xpath,但是在尝试调用driver.find_element_from_xpath('<xpath>')时得到了NoSuchElementException。你知道吗

我真的不知道怎么可能。HTML非常长—我最终要查找的是嵌套在多个table、body、td、tr标记下的内容。不过,这里有一个要素:

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

当我在Chrome中单击“Copy 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

我是新来的,所以有人能帮我理解为什么这不起作用和/或我可以做些什么来修复它吗?你知道吗


Tags: fromdriverselenium时间tableelement手动find
1条回答
网友
1楼 · 发布于 2024-04-25 08:57:59

所需的元素是启用了JavaScript的元素,因此要在元素上click(),您必须为element_to_be_clickable()诱导WebDriverWait,并且可以使用以下Locator Strategies

  • 使用LINK_TEXT

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "Alaska"))).click()
    
  • 使用(逻辑)XPATH(而不是绝对xpath):

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[contains(@onclick, 'toggleDisplay') and text()='Alaska']"))).click()
    
  • 注意:必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

相关问题 更多 >

    热门问题