python+selenium之元素的八大定位方法


以百度搜索框為例,先打開百度網頁

    1.點右上角爬蟲按鈕

    2.點左下角箭頭

    3.講箭頭移動到百度搜索輸入框上,輸入框高亮狀態

    4.下方紅色區域就是單位到輸入框的屬性:

<input id="kw" class="s_ipt" type="text" autocomplete="off" maxlength="100" name="wd">

 

 



元素定位:find_element_by_id()

    1.從上面定位到的元素屬性中,可以看到有個id屬性:id="kw",這里可以通過它的id屬性單位到這個元素。

    2.定位到搜索框后,用send_keys()方法

 


元素定位:find_element_by_name()

    1.從上面定位到的元素屬性中,可以看到有個name屬性:name="wd",這里可以通過它的name屬性單位到這個元素。

    說明:這里運行后會報錯,說明這個搜索框的name屬性不是唯一的,無法通過name屬性直接定位到輸入框

 


元素定位:find_element_by_class_name()

    1.從上面定位到的元素屬性中,可以看到有個class屬性:class="s_ipt",這里可以通過它的class屬性定位到這個元素。

 


元素定位:find_element_by_tag_name()

    1.從上面定位到的元素屬性中,可以看到每個元素都有tag(標簽)屬性,如搜索框的標簽屬性,就是最前面的input

    2.很明顯,在一個頁面中,相同的標簽有很多,所以一般不用標簽來定位。以下例子,僅供參考和理解,運行肯定報錯

 

 
元素定位:find_element_by_link_text()

    1.定位百度頁面上"hao123"這個按鈕

 

查看頁面元素:

<a class="mnav" target="_blank" href="http://www.hao123.com">hao123</a>

    2.從元素屬性可以分析出,有個href = "http://www.hao123.com

說明它是個超鏈接,對於這種元素,可以用driver.find_element_by_link_text("hao123")

 

 
元素定位:find_element_by_partial_link_text()

    1.有時候一個超鏈接它的字符串可能比較長,如果輸入全稱的話,會顯示很長,這時候可以用一模糊匹配方式,截取其中一部分字符串就可以了

    2.如“hao123”,只需輸入“ao123”也可以定位到

 

元素定位:find_element_by_xpath()

XPath是一種XML文檔中定位元素的語言。該定位方式也是比較常用的定位方式。

 

 

使用:find_element_by_xpath("XPath")

實例:

1通過屬性定位元素

find_element_by_xpath("//標簽名[@屬性='屬性值']")

id屬性:

find_element_by_xpath("//input[@id='kw']")

class屬性:

find_element_by_xpath("//input[@class='s_ipt']")

name屬性:

find_element_by_xpath("//input[@name='wd']")

maxlength屬性:

find_element_by_xpath("//input[@maxlength='255']")

2通過標簽名定位元素

指所有input標簽元素

find_element_by_xpath("//input")

3父子定位元素

查找有父親元素的標簽名為span,它的所有標簽名叫input的子元素

find_element_by_xpath("//span/input") 

4根據元素內容定位元素(非常實用)

find_element_by_xpath("//p[contains(text(),'京公網')]") 

<p id="jgwab">

<i class="c-icon-jgwablogo"></i>

京公網安備11000002000001號

</p>

注:contains的另一種用法

//input[contains(@class,'s')]

說明class屬性包含s的元素。

5組合定位元素

//父元素標簽名/標簽名的屬性值:指的是span下的input標簽下class屬性為s_ipt的元素

find_element_by_xpath("//span/input[@class='s_ipt']")

多個屬性組合定位(挺常用的)

指的是input標簽下id屬性為kw且name屬性為wd的元素

find_element_by_xpath("//input[@class='s_ipt' and @name='wd']")

指的是p標簽下內容包含“京公網”且id屬性為jgwab的元素

find_element_by_xpath("//p[contains(text(),'京公網') and @id='jgwab']")  

 

元素定位:find_element_by_css_selector()

CSS(Cascading Style Sheets)是一種語言,它用來描述HTML和XML文檔的表現。CSS可以較為靈活的選擇控件的任意屬性,一般情況下會比XPath快。且語法也比較簡潔。

不過CSS對於初學者而言比較復雜。

 

 

使用:find_element_by_css_selector("CSS")

實例:

1通過id屬性定位元素

#號表示通過id屬性來定位元素

find_element_by_css_selector("#kw")

2通過class屬性定位元素

.號表示通過class屬性來定位元素

find_element_by_css_selector(".s_ipt")

3通過標簽名定位元素

find_element_by_css_selector("input")

4通過屬性定位元素(挺常用的)

find_element_by_css_selector("[name='wd']")

find_element_by_css_selector("[maxlength='255']")

屬性值包含某個值

屬性值包含wd:適用於由空格分隔的屬性值。

find_element_by_css_selector("[name~='wd']")

5父子定位元素

查找有父親元素的標簽名為span,它的所有標簽名叫input的子元素

find_element_by_css_selector("span>input")

6組合定位元素

標簽名#id屬性值:指的是該input標簽下id屬性為kw的元素

find_element_by_css_selector("input#kw")

標簽名.class屬性值:指的是該input標簽下class屬性為s_ipt的元素

find_element_by_css_selector("input.s_ipt")

標簽名[屬性=’屬性值‘]:指的是該input標簽下name屬性為wd的元素

find_element_by_css_selector("input[name='wd']")

父元素標簽名>標簽名.class屬性值:指的是span下的input標簽下class屬性為s_ipt的元素

find_element_by_css_selector("span>input.s_ipt")

多個屬性組合定位元素(挺常用的)

指的是input標簽下class屬性為s_ipt且name屬性為wd的元素

find_element_by_css_selector("input.s_ipt[name='wd']")

指的是input標簽下name屬性為wd且maxlength為255的元素

find_element_by_css_selector("input[name='wd'][maxlength='255']")


免責聲明!

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



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