selenium 定位元素的方式


web自動化主要做的事情:

  1. 選擇界面元素    

  2.操作界面元素(a> 輸入操作:點擊,輸入文字,拖拽等  b> 輸出操作:獲取元素的各種屬性)   

  3.根據界面上獲取的數據進行分析和處理

 

根據這樣的特性,因此能正確定位到頁面的元素是最重要的,下面介紹幾種定位元素的方法,講之前先說一下selenium常用的兩種書寫方式。

  a >  element = driver.find_element_by_id("kw")

  b >  from selenium.webdriver.common.by import By

         element = driver.find_element(by = By.ID,value = "kw")

  c > 返回多個值,值使用elements,返回值為列表list,每一種元素定位的返回值,都可能存在多個值的返回

 

1. 通過id選擇元素,唯一的

  element=driver.find_element_by_id("kw")

2. 通過name選擇元素

  <input name="sheese" type="text"/>

      element = driver.find_element_by_name("sheese")

3. 通過class選擇元素

  <div class="cheese"><span>cheddar</span></div>

  <dic class="cheese"><span>gouda</span></div>

  find_elements_by_class_name("cheese")    - -    返回了多個,使用elements - -  list

4. 通過tag名選擇元素

  tag就是標簽名

  <iframe src="..."></iframe>

       element = driver.find_element_by_tag_name("iframe")

  from selenium.webdriver.common.by import By

  frame = driver.find_element(By.TAG_NAME,"iframe")

 5. 通過鏈接文本選擇元素

  <a href="http:www.baidu.com">轉到百度</a>

    a > 全鏈接文本

      ele = driver.find_element_by_link_text(u"轉到百度")

    b > 部分鏈接文本

      也可以通過部分文本去找到該鏈接元素

      ele = driver.find_element_by_partial_link_text(u"百度")

6. CSS選擇器:空格代表子元素,>代表直接子元素

針對CSS中的nth-child比較常用:詳細介紹可以參考:https://www.jianshu.com/p/5c9ebb4d8e53

  

 

 

      

 

       CSS選擇器是瀏覽器用來選擇元素的,執行效率高,因為有些樣式是通過CSS來實現的。

  兩種展示方式: 

    返回單個值: find_element_by_css_selector 

    返回多個值: find_elements_by_css_selector

   a>  CSS選擇元素的方法tag

    driver.find_elements_by_css_selector('p')

   b>  CSS選擇元素的方法id : 格式(#id名) 

    driver.find_elements_by_css_selector('#food')

   c>  CSS選擇元素的方法class:格式(.)

    <span class="vegetable good">黃瓜</span>

    driver.find_elements_by_css_selector('.vegrtable')

    driver.find_elements_by_css_selector('.food')

  d> 后代(descendant)選擇器, 可以是間接子節點,之間用空格

    格式 : <s1><s2>

      選擇s1元素里面所有s2元素;  

      可以是直接子節點,也可以不是; 

    》 #choose_car option : 選擇id是choose_car下面的子節點option

    》 footer p : 選擇tag名為footer下的子節點,tag名為p

    》 ul ol li em {color:blue;}:選擇ul下ol下li下em下屬性為{color:blue;} 

    不是很明白的話,可以看下面的這段示例,會讓你更加明了。。。。。。  

    直接子元素:

      <select id="choose_car">

        <option value = "volue">A</option>

        <option value = "corolla">B</option>

        <option value = "audi">C</option>

      </select>

      eles = driver.find_elements_by_css_selector('#choose_car option')   --  id 為“choose_car” 下面option子節點

 

      間接子元素:

      <footer>

        <div>

          <p>test1</p>

        <div>

      </footer>

      ele = driver.find_element_by_css_selector('footer p')   -- 選擇tag標簽名為"footer",下面的間接子節點的tag為p的

 

     e> 子元素(child)選擇器,必須是直接子節點,之間用 > 

     例如后代選擇器: #choose_car option -- 表示可以是間接子節點,也可以是直接子節點

       子元素:#choose_car option

                   footer > p

                           很多級:ul > ol > li > em

      f> 組(group)選擇: 同時選擇多個元素,逗號隔開

      語法:<s1>,<s2>

      例如: p,button

         #food, .cheese

     三種常用的示例:  

      選擇id為food的所有span子元素和所有的p(包含非food的子元素)

        #food > span,p

      選擇id為food的所有span子元素和所有的p子元素

        #food > span , #food > p

      選擇id為food的所有子元素

        #food > *

   g> 兄弟節點

    選擇緊接在另一個元素后的元素,二者有相同的父元素

      #food + fiv

      #many > div > p.special + p

    選擇在另一個元素后的元素,二者具有相同的父元素

      #food ~ div

    屬性選擇器:

      

 

 

 7. xpath選擇  

  驗證css表達式:可以在F12下選擇Console:$$('表達式')

  驗證xpath表達式:$x('表達式')

  a > // : 相對路徑    /:絕對路徑

    選擇整個文檔中所有的option節點,不管什么位置    

      //div//p :表示選擇所有的div元素里面的p元素,不管div在什么位置,不管p元素在div下面的什么位置

      //div//p :就等於css選擇器的寫法 :div p

  b > 通配符

    //*[contains(@class,'good')]    --  頁面上所有元素屬性class包含good的值

    //p[@class='len']  --  頁面上所有p元素下class='len'的值

    //*[@class]   --  頁面上所有具有class屬性的

  c > 選擇匹配到的某一個

    //*[@id="choose_car"]/option[1]: 下標是從1開始的,找到id=choose_car下的option中的第一個

    last() : 最后幾個

        //*[@id='choose_car']/option[last()-n]: 匹配倒數第n個

    position() : > = != < 匹配哪幾個

        //*[@id='choose_car']/option[position()=4]: 匹配到第四個

        //*[@id='choose_car']/option[position()>=2]:從第二個開始,大於等於2的所有元素

    區間 ://*[@id='choose_car']/option[position>=last()-1]: 選擇后面二個

  d > 組選擇器 使用|分開

    //p | //button

    //*[@id='choose_car/option[position()>=last()-1]' | footer | //div/p]

  e > 兄弟元素 

    following-sibling:: 可以選擇后面的兄弟節點

        //*[@id="food"/following-sibling::div[1]]:選找到id=food的下div的兄弟節點,中的第一個div或者最后一個last()

        //*[@id="food"]/following-sibling::div[last()]

        //*[@id="food"]/following-sibling::div[position()<last()]

    preceding-sibling::div 可以選擇前面的兄弟節點       

        //*[@id="food"]/preceding-sibling::div選取前面的兄弟節點

  f > 選擇父節點

    .. 符號

    需要在某一個已經查找出來的html里面找其他元素,必須//前面加一個點.

 

目前就這么多的方法,后面寫一些selenium的一些操作,和找到元素后的操作。。。。。    

  


免責聲明!

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



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