Selenium+python之元素定位

Selenium提供了一下方法來定義一個(gè)頁面中的元素:

find_element_by_id

若查找元素過多,可以在elements后面加s,則返回的結(jié)果將是列表,如:

find_elements_by_id

PS:個(gè)人覺得css對(duì)于新手來說比較難,多操作幾遍就可以了,而且css定位比較快,語法簡(jiǎn)潔,所以偏向于css的使用。

1、通過id定位元素

如果id不是動(dòng)態(tài)的,一個(gè)頁面的id是唯一的。這是最簡(jiǎn)單的定位方式。

實(shí)例:? find_element_by_id("kw")

注意點(diǎn):有些id值是動(dòng)態(tài)變化的,則不能使用該方法定位。如下:id就是動(dòng)態(tài)的,每次進(jìn)入頁面,該id都會(huì)改變。比如登錄網(wǎng)易163郵箱。

2、通過class_name定位元素

class_name有可能重復(fù)。

實(shí)例:? find_element_by_class_name("s_ipt")?

3、通過tag_name定位元素

標(biāo)簽名字最容易重復(fù),不過,當(dāng)定位一組數(shù)據(jù)時(shí),可使用。

實(shí)例:find_element_by_tag_name("input")

4、通過name定位元素

name有可能會(huì)重復(fù)。

實(shí)例:find_element_by_name("wd")

5、通過link文字精確定位元素


實(shí)例:find_element_by_link_text("百度一下")

6、通過link文字模糊定位元素

有時(shí)候它的字符串可能比較長,如果輸入全稱的話,會(huì)顯示很長,這時(shí)候可以用一模糊匹配方式,截取其中一部分字符串就可以了

實(shí)例:find_element_by_partial_link_text("一下")

7、通過CSS定位元素(最重要)


7.1 通過id屬性定位

#號(hào)表示通過id屬性來定位元素

find_element_by_css_selector("#kw")

7.2 通過class屬性定位元素

“ .? ”號(hào)表示通過class屬性來定位元素

find_element_by_css_selector(".s_ipt")

7.3 通過標(biāo)簽名定位元素

find_element_by_css_selector("input")

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

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

7.5 父子定位元素


查找有父親元素的標(biāo)簽名為span,它的所有標(biāo)簽名叫input的子元素

find_element_by_css_selector("span>input")


7.6 組合定位元素

標(biāo)簽名#id屬性值:指的是該input標(biāo)簽下id屬性為kw的元素

find_element_by_css_selector("input#kw")


標(biāo)簽名.class屬性值:指的是該input標(biāo)簽下class屬性為s_ipt的元素

find_element_by_css_selector("input.s_ipt")


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

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


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

find_element_by_css_selector("span>input.s_ipt")


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

指的是input標(biāo)簽下id屬性為kw且name屬性為wd的元素

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


當(dāng)然了,firefox也可以復(fù)制,安裝好firepath插件即可,如圖:

8、通過XPath定位元素

實(shí)例:

8.1通過屬性定位元素

find_element_by_xpath("http://標(biāo)簽名[@屬性='屬性值']")

id屬性:

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

class屬性:

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

name屬性:

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

8.2通過標(biāo)簽名定位元素

指所有input標(biāo)簽元素

find_element_by_xpath("http://input")

8.3父子定位元素

查找有父親元素的標(biāo)簽名為span,它的所有標(biāo)簽名叫input的子元素

driver.find_element_by_xpath("http://span / input [ @id='su' ] ?" )


8.4根據(jù)元素內(nèi)容定位元素(非常實(shí)用)

find_element_by_xpath("http://p[contains(text(),'京公網(wǎng)')]")

京公網(wǎng)安備11000002000001號(hào)

注:contains的另一種用法

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

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

8.5組合定位元素

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

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

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

指的是input標(biāo)簽下id屬性為kw且name屬性為wd的元素

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

指的是p標(biāo)簽下內(nèi)容包含“京公網(wǎng)”且id屬性為jgwab的元素

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

參考博客園:http://www.cnblogs.com/yufeihlf/p/5717291.html

參考博客園:http://www.cnblogs.com/yoyoketang/p/6128580.html

參考博客園:http://www.cnblogs.com/taceywong/p/6602736.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容