大部分人在使用selenium定位元素時请琳,用的是xpath定位,因為xpath基本能解決定位的需求层坠。css定位往往被忽略掉了,其實css定位也有它的價值刁笙,css定位更快破花,語法更簡潔。
一:css:屬性定位
1疲吸、css可以通過元素的id座每、class、標簽這三個常規(guī)屬性直接定位摘悴,如下:
①. css用#號表示id屬性峭梳,如:
id=“kw” 可以寫成:#kw
②. css用.表示class屬性,如:
class="s_ipt"可以寫成:.s_ipt
③. css直接用標簽名稱蹂喻,無任何標識符葱椭,如:input
二:css:其他屬性
1、css除了上述以外口四,也可以通過其他屬性定位孵运,如下:
①. css通過name屬性定位:
driver.find_element(By.CSS_SELECTOR,"[name='wd']")
②. css通過autocomplete屬性定位:
driver.find_element(By. CSS_SELECTOR,"[autocomplete='off']")
③.css通過type屬性定位:
driver.find_element(By.CSS_SELECTOR,"[type='text']")
三:css:標簽
1、css頁可以通過標簽與屬性的組合來定位元素窃祝,如下:
①. css通過標簽與class屬性的組合定位driver.find_element(By.CSS_SELECTOR,"input.s_ipt")
②. css通過標簽與id屬性的組合定位driver.find_element(By.CSS_SELECTOR,"input#kw")
③. css通過標簽與其他屬性組合定位driver.find_element(By.CSS_SELECTOR,"input[id='kw']")
四:css:層級關(guān)系
1掐松、如://form[@id=‘form’]/span/input和//form[@class=‘fm’]/span/input
①. css通過層級關(guān)系定位driver.find_element(By.CSS_SELECTOR,"form#form>span>input")
②. css通過層級關(guān)系定位driver.find_element(By.CSS_SELECTOR,"form.fm>span>input")
五:css:索引
1踱侣、css也可以通過索引option:nth-child(1)來定位子元素粪小,如下:
①. 選擇第一個子元素driver.find_element(By.CSS_SELECTOR,"select#nr>option:nth-child(1)")
②. 選擇第二個子元素driver.find_element(By.CSS_SELECTOR,"select#nr>option:nth-child(2)")
③. 選擇第三個子元素driver.find_element(By.CSS_SELECTOR,"select#nr>option:nth-child(3)")
六:css:邏輯運算
1、css同時匹配兩個屬性抡句,不需要and關(guān)鍵字driver.find_element(By.CSS_SELECTOR,"input[id='kw'][name='wd']")
七:css:模糊匹配driver.find_element(By.CSS_SELECTOR,"input:contains('kw')")
一探膊、xpath:屬性定位
1、xpath也可以通過元素的id待榔、name逞壁、class這些屬性定位流济,如下:
①. 用xpath通過id屬性定位
driver.find_element(By.XPATH,"http://[@id='kw']")
②. 用xpath通過name屬性定位
driver.find_element(By.XPATH,"http://[@name='wd']")
③. 用xpath通過class屬性定位
driver.find_element(By.XPATH,"http://*[@class='s_ipt']")
二、xpath:其他屬性
1腌闯、沒有上述屬性绳瘟,可以通過其他屬性定位,如下:
driver.find_element(By.XPATH,"http://*[@autocomplete='off']")
三姿骏、xpath:標簽
1糖声、如果同一個屬性,同名的比較多分瘦,可以通過標簽篩選下
2蘸泻、如果不想制定標簽名稱,可以用號表示任意標簽
3嘲玫、如果想制定具體某個標簽悦施,就可以直接寫標簽名稱
①. 用xpath通過其他屬性定位driver.find_element(By.XPATH,"http://input[@autocomplete='off']")
②. 用xpath通過id屬性定位driver.find_element(By.XPATH,"http://input[@id='kw']")
③. 用xpath通過name屬性定位driver.find_element(By.XPATH,"http://name[@id='wd']")
四、xpath:層級
1去团、如果一個元素抡诞,他的屬性不明顯,無法直接定位土陪,可以先找到他的父元素
2沐绒、找到父元素,再找下一級就能定位
①. 通過定位父元素來定位input輸入框driver.find_element(By.XPATH,"http://span[@id='s_kw_wrap']/input")
②. 通過定位爺元素來定位input輸入框driver.find_element(By.XPATH,"http://form[@id='form']/span/input")
五旺坠、xpath:索引
1乔遮、如果一個元素和他同級的標簽一樣,無法通過層級定位
2取刃、可以通過排序定位
①. 用xpath定位第一位driver.find_element(By.XPATH,"http://select[@id='nr']/option[1]")
②. 用xpath定位第二位driver.find_element(By.XPATH,"http://select[@id='nr']/option[2]")
③. 用xpath定位第三位driver.find_element(By.XPATH,"http://select[@id='nr']/option[3]")
六蹋肮、xpath:邏輯運算
1、xpath還有一個比較強的功能璧疗,是可以多個屬性邏輯運算的坯辩,可以支持and、or崩侠、not
2漆魔、一般用的比較多的是and運算,同時滿足兩個屬性driver.find_element(By.XPATH,"http://select[@id='nr' and @autocomplete='off']")
七却音、xpath:模糊匹配
1改抡、xpath強大的模糊匹配
2、掌握了模糊匹配功能系瓢,基本上沒有定位不到的
3阿纤、by_partial_link,模糊匹配定位
driver.find_element(By.XPATH,"http://*[contains(text(),'hao123')]")
作者:Rc神
鏈接:http://www.reibang.com/p/57167659d920
來源:簡書