如何在 selenium 中选择没有 ID/text_link/name 的元素?

问题描述

HTML of the website

我要选择的元素的HTML代码

   <a href="../s-reminderNotice.asp?fname=b%2D3c%2dplessonBooking%2Easp%3Flimit%3dpl" class="sidelinkbold" 
   target="mainFrame" 
   onmouSEOver=" window.status='Practical Training Booking'; 
   return true" onmouSEOut="window.status=' ';
   return true">Booking without Fixed Instructor</a>

我想选择这个“没有固定教练的预订”的元素;但是这个元素没有 ID/link_text/name。如何将站点定向到 HREF。有没有办法使用xpath来定位它,该元素在网站左侧的列中,因此还有许多其他同类元素。 (见图)

我试过了,它又回来了:

AttributeError: 'WebDriver' object has no attribute 'findElement'

代码

driver.findElement(By.xpath("//a[@href='THE LINK']")).click();

解决了;元素在 IFRAME 中;不得不将框架切换到访问元素

解决方法

AttributeError: 'WebDriver' object has no attribute 'findElement'

你使用的是python,所以驱动程序没有findElemnt方法,它是find_Element

https://www.selenium.dev/selenium/docs/api/py/webdriver_remote/selenium.webdriver.remote.webdriver.html?highlight=webdriver%20class#selenium.webdriver.remote.webdriver.WebDriver.find_element_by_class_name

use:

    driver.find_element(By.XPATH("//a[contains(string(),'Booking without Fixed Instructor')]")
,

要点击文本为无固定讲师预订的元素,您可以使用以下任一Locator Strategies

  • 使用 link_text

    driver.find_element(By.LINK_TEXT,"Booking without Fixed Instructor")
    
  • 使用 partial_link_text

    driver.find_element(By.PARTIAL_LINK_TEXT,"Booking without Fixed Instructor").click()
    
  • 使用 css_selector

    driver.find_element(By.CSS_SELECTOR,"a.sidelinkbold[href*='s-reminderNotice']").click()
    
  • 使用 xpath

    driver.find_element(By.XPATH,"//a[@class='sidelinkbold' and contains(@href,'s-reminderNotice')][contains(.,'Booking without Fixed Instructor')]").click()
    

所需元素是动态元素,因此理想情况下,单击需要为 WebDriverWait 引入 element_to_be_clickable() 的元素,您可以使用以下任一 Locator Strategies:>

  • 使用 LINK_TEXT

    WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.LINK_TEXT,"Booking without Fixed Instructor"))).click()
    
  • 使用 PARTIAL_LINK_TEXT

    WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT,"Booking without Fixed Instructor"))).click()
    
  • 使用 CSS_SELECTOR

    WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"a.sidelinkbold[href*='s-reminderNotice']"))).click()
    
  • 使用 XPATH

    WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,'Booking without Fixed Instructor')]"))).click()
    
  • 注意:您必须添加以下导入:

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

参考文献

您可以在以下位置找到一些关于 NoSuchElementException 的相关讨论:

,

试试这个 xpath:

//a[text()[contains(.,'Booking without Fixed Instructor')]]