如何使用硒Python单击页面链接

时间:2018-12-13 22:54:23

标签: python selenium xpath css-selectors webdriverwait

我的错误:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"link text","selector":"entrar"}

我的HTML如下:

<a role="menuitem" href="/login" class="_yce4s5">
  <div class="_hgs47m">
     <div class="_10ejfg4u">
       <div>
         Entrar
       </div>
     </div>
 </div> 
</a>

我单击entrar,然后在selenium中用python编写以下代码:

driver.implicitly_wait(10)
element = driver.find_element_by_link_text('Entrar')
element.click()

但是它会引发此NoSuchElementException。

3 个答案:

答案 0 :(得分:1)

您是否尝试对首字母使用大写?像'Entrar'而不是'entrar'

答案 1 :(得分:1)

您可以尝试driver.find_element_by_partial_link_text('entrar'),因为链接中可能还有其他文本。我喜欢通过xpath获取元素。很简单如果您使用的是Firefox,则只需获取附加的xpath查找器即可找到网页上任何元素的xpath。

答案 2 :(得分:1)

要单击带有 Entrar 文本的页面链接,因为该元素是动态元素,因此必须诱使 WebDriverWait 以便使所需的元素可点击,您可以使用以下任一解决方案:

  • 使用CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[role='menuitem'][href='/login'] > div > div > div"))).click()
    
  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@role='menuitem' and @href='/login']//div[normalize-space()='Entrar']"))).click()
    
  • 注意:您必须添加以下导入:

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