以百度搜索框為例,先打開百度網頁
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']")