PhantomJS + Selenium webdriver 總結-元素定位


  webdriver提供了豐富的API,有多種定位策略:id,name,css選擇器,xpath等,其中css選擇器定位元素效率相比xpath要高些,使用id,name屬性定位元素是最可靠,效率最高的一種辦法。

  1、元素定位的方法:find_element() 與find_elements()

    find_element() 該方法返回基於指定查詢條件的webElement對象,或拋出不符合條件的異常  eg:element = driver.find_element(By.ID,'u1')

    findElements() 該方法返回指定查詢條件的WebElement的對象集合,或拋出不符合條件的異常
 
  2、 WebElement對象提供的各種定位元素策略
 

    ID:driver.findElement(By.ID,'elementID')    

    Name:driver.findElement(By.NAME,'elementName')

    className:driver.findElement(By.CLASS_NAME,'elementClassName')        

    tagName:driver.findElement(By.TAG_NAME,'htmlTagName')

     linkText:driver.findElement(By.LINK_TEXT,'linkText')

    partialLinkText:driver.findElement(By.PARTIAL_LINK_TEXT,'partialLinkText')

    css:driver.findElement(By.CSS_SELECTOR,'cssSelector')

    xpath:driver.findElement(By.XPATH,'xpathQuery') 

 

    例如:url ='https://www.baidu.com/'

    driver.find_element(By.ID,'u1')

     driver.find_element(By.NAME,'tj_trnews')

     driver.find_elements(By.CLASS_NAME,'mnav')

     driver.find_element(By.ID,'u1').find_elements(By.TAG_NAME,'a')

     driver.find_element(By.ID,'u1').find_element(By.LINK_TEXT,'新聞')

     driver.find_element(By.ID,'u1').find_element(By.PARTIAL_LINK_TEXT,'聞')

     driver.find_elements(By.CSS_SELECTOR,"a[name^='tj']") #匹配屬性值name以tj開頭的元素

    driver.find_elements_by_xpath("//div[@id='u1']/a")

  

  3、使用元素的任何屬性來定位元素

    driver.find_element(By.CSS_SELECTOR("標簽名[屬性名='屬性值']"))

    

    1、^=        driver.find_element(By.CSS_SELECTOR("標簽名[屬性名^='xxx']"))  匹配屬性值以xxx開頭的元素

          例如:driver.find_elements(By.CSS_SELECTOR,"a[name^='tj']")  匹配name值以tj開頭的a元素集合

            適用於:driver.find_elements_by_css_selector("a[name^='tj']")

 

    2、$=        driver.find_element(By.CSS_SELECTOR("標簽名[屬性名$='xxx']"))  匹配屬性值以xxx結尾的元素

           例如:driver.find_elements(By.CSS_SELECTOR,"a[name$='s']")  匹配name值以s結尾的a元素集合

          適用於:driver.find_elements_by_css_selector("a[name$='s']")

 

     3、*=         driver.find_element(By.CSS_SELECTOR("標簽名[屬性名*='xxx']"))  匹配屬性值包含xxx的元素

           例如:driver.find_elements(By.CSS_SELECTOR,"a[name*='tr']")  匹配name值包含tr的a元素集合

           適用於:driver.find_elements_by_css_selector("a[name*='tj']")

 
   4、 使用xpath定位元素,相比cssSelector,xpath也是比較常用的一種定位元素的方式,因為它很方便,缺點是,消耗系統性能
    
    類似CSS_SELECTOR
 
    1、contains  driver.find_element(By.XPATH,"//標簽名[contains(@屬性名,'xxx')]")  匹配指定標簽中指定屬性中包含xxx的元素
 
      如:driver.find_element(By.XPATH,"//a[contains(@name,'tr')]")

    2、starts-with  driver.find_elements(By.XPATH,"//標簽名[starts-with(@屬性名,'xxx')]") 匹配指定標簽中指定屬性中以xxx開頭元素
 

      如:driver.find_elements(By.XPATH,"//a[starts-with(@name,'tj')]")

        適用於:driver.find_elements_by_xpath("//a[starts-with(@name,'tj')]")

 
    3、使用xpath的text函數
      driver.find_element(By.XPATH,"//a[text()='新聞']") #絕對匹配
 
      driver.find_element(By.XPATH,"//a[contains(text(),'新聞')]") #包含匹配
 
      適用於:driver.find_elements_by_xpath("//a[contains(@name,'tr')]")
 
  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM