【问题标题】:How to click on javascript hyperlink element using selenium python如何使用 selenium python 单击 javascript 超链接元素
【发布时间】:2020-04-22 15:10:26
【问题描述】:

我的目标是使用 selenium python 点击​​这个超链接元素,这是我尝试过的 3 种解决方案,但都没有奏效。

<div class="navigation_item">
<a href="javascript:;" onclick="navigationMenu('students');">Students (165)</a>
</div>

解决方案 1:

driver.find_element_by_link_text('Students (165)').click()

错误消息:selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{"method":"link text","selector":"Students (165)"}

解决方案 2:

driver.find_element_by_xpath('/html/body/div[2]/div[1]/div[3]/div/div[1]/div[3]/div[7]/a').click()

错误消息:selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{"method":"xpath","selector":"/html/body/div[2]/div [1]/div[3]/div/div[1]/div[3]/div[7]/a"}

解决方案3:使用javascript代码

javascript = "document.getElementsByClassName('navigation_item')[3].click();"
driver.execute_script(javascript)

错误消息:selenium.common.exceptions.JavascriptException:消息:javascript 错误:无法读取未定义的属性“点击”

那么,每个解决方案出了什么问题?我怎样才能让它工作?

【问题讨论】:

    标签: python selenium selenium-webdriver


    【解决方案1】:

    要单击文本为 Students (165) 的元素,您必须为 element_to_be_clickable() 诱导 WebDriverWait,您可以使用以下任一 Locator Strategies

    • 使用LINK_TEXT

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

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "Students ("))).click()
      
    • 使用CSS_SELECTOR

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.navigation_item>a[onclick^='navigationMenu'][onclick*='students']"))).click()
      
    • 使用XPATH

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='navigation_item']/a[starts-with(@onclick, 'navigationMenu') and contains(., 'Students')]"))).click()
      
    • 注意:您必须添加以下导入:

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

    【讨论】:

      【解决方案2】:

      它可能会引发错误,因为在您检查元素时未加载页面。尝试使用:

      browser = webdriver.Firefox()
      
      browser.implicitly_wait(5)
      

      然后您可以使用您的第一个解决方案: driver.find_element_by_link_text('Students (165)').click()

      这应该在查找元素设置超时 5 秒时触发。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-09
        • 2021-03-31
        • 1970-01-01
        • 1970-01-01
        • 2013-10-04
        • 2021-12-03
        • 2017-11-23
        相关资源
        最近更新 更多