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