一、通過id查找
例:<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
element = driver.find_element_by_id("kw")
二、通過name查找
例:<input name="cheese" type="text"/>
cheese = driver.find_element_by_name("cheese")
三、通過classname查找
例:<div class="cheese"><span>Cheddar</span></div>
cheeses = driver.find_elements_by_class_name("cheese")
四、通過標簽名查找
例:<iframe src="..."></iframe>
frame = driver.find_element_by_tag_name("iframe")
五、通過鏈接文本查找
例:<a href="http://www.baidu.com">轉到百度</a>
ele = driver.find_element_by_link_text("轉到百度")
注:有的時候,鏈接的文本很長,我們甚至只需要通過部分文本去找到該鏈接元素
只要這個鏈接文本是唯一的就行
六、通過CSS選擇器查找
eles = driver.find_element_by_css_selector('#choose_car option')
基本用法:
| 方式 |
用法 |
舉例 |
描述 |
| 根據class查找 |
.class |
.intro |
查找class=”intro”元素 |
| 根據id查找 |
#id |
#firstname |
查找id=”firstname”的元素 |
| 根據標簽名查找 |
tagname |
div |
查找<div>元素 |
| 根據屬性查找 |
[attribute] |
[target] |
查找具有”target”屬性的元素 |
| [attribute=value] |
[target=_blank] |
查找包含target=”_blank”的元素 |
|
| [attribute^=value] |
[href^=”https”] |
查找包含href屬性,且該屬性的值以”https”開頭的元素 |
|
| [attribute$=value] |
[href$=”.pdf”] |
查找包含href屬性,且該屬性的值以”.pdf”結尾的元素 |
|
| [attribute*=value] |
[href*=”abc”] |
查找包含href屬性,且該屬性的值包含“abc”的元素 |
高級用法:
| 用法 |
舉例 |
描述 |
| 后代元素選擇器 |
div p |
選擇所有在<div>里面的<p> |
| 子元素選擇器 |
div>p |
選擇所有<div>的<p>子元素 |
| 組選擇器,同時選擇多個元素 |
<div>,<p> |
同時選擇所有的<div>元素和<p>元素 |
| 相鄰兄弟元素 |
<div>+<p> |
選擇所有<div>后面緊跟的<p>元素 |
| 兄弟元素 |
<div>~<p> |
選擇所有<div>元素后面的<P>元素(不一定要緊跟) |
| :empty |
p:empty |
選擇沒有子節點(包括文本)的<p>元素 |
| :first-child |
p:first-child |
選擇所有是 父元素第一個元素的<p>元素 |
| :first-of-type |
p:first-of-type |
選擇所有是 父元素第一個<p>元素的<p>元素 |
| :last-child |
p:last-child |
選擇所有是其父元素最后一個元素的<p>元素 |
| :last-of-type |
p:last-of-type |
選擇所有是其父元素最后一個<p>元素的<p>元素 |
| :nth-child(n) |
p:nth-child(2) |
選擇所有是其父元素第二個元素的<p>元素 |
| :nth-of-type(n) |
p:nth-of-type(2) |
選擇所有是其父元素的第二個<p>元素的<p>元素 |
| :nth-last-child(n) |
p:nth-last-child(2) |
選擇所有是其父元素倒數第二個元素的<p>元素 |
| :nth-last-of-type(n) |
p:nth-last-of-type |
選擇所有是其父元素倒數第二個<p>元素的<p>元素 |
| :only-child |
p:only-child |
選擇所有是其父元素唯一一個子元素的<p>元素 |
| :only-of-type |
p:only-of-type |
選擇所有是其父元素唯一一個<P>子元素的<p>元素 |
| :not(selector) |
:not(p) |
選擇所有不是<p>元素的元素 |
七、通過Xpath查找
eles = food.find_elements_by_xpath('./p')
基本用法:
| 用法 |
舉例 |
描述 |
| 絕對路徑(/) |
/html/body/div/p |
表示html文檔中的p節點,xpath路徑表示了元素的位置 |
| 相對路徑(//) |
//footer//p |
表示footer元素中所有的后代P類型元素 |
| 混合使用 |
//footer/div/p |
表示html文檔中footer元素下的div元素下的p元素 |
| 根據屬性選擇 |
//*[@style] |
表示選擇HTML文檔下所有包含style屬性的元素 |
| //p[@spec='len2'] |
選擇所有具有spec 屬性且值為“len2” 的p元素 |
|
| //a[contains(@href,'51job.com')]
|
選擇所有具有href屬性,且該屬性的值包含“51job.com”的a元素 |
|
| //a[starts-with(@href,'http://big5.51job')] |
表示屬性href以“http://big5.51job”開頭 |
高級用法:
| 方式 |
用法 |
舉例 |
描述 |
| 根據文本定位元素
|
全部文字 |
//*[text()='花唄套現'] |
文本等於“花唄套現”的元素 |
| 部分文字 | //*[contains(text(),'花唄') | 文本包含"花唄”的元素 | |
| 子元素選擇器 |
根據下標獲取(下標從1開始) |
//div[@id='food']/p[1] |
獲取第一個p子元素 |
| 倒數索引 |
//div[@id='food']/*[last()](倒數第一個) //div[@id='food']/*[last()-1](倒數第二個) //div[@id='food']/*[last()-2](倒數第三個) |
last()代表倒數第一個元素
|
|
| postion():代表元素的位置 |
//div[@id='food']/*[position()=2] |
表示第二個元素 |
|
| //div[@id='food']/[position()=last()] |
表示最后一個元素 |
||
| //div[@id='food']/[position()=last()-2] |
表示倒數第三個元素 |
||
| //div[@id='food']/[position()>=last()-2] |
表示最后三個元素 |
||
| 組選擇器 |
用豎線隔開 |
//p | //button |
等價於css中的p, button |
| 相鄰兄弟選擇器 |
following-sibling:: |
//*[@id=’food’]/following-sibling::div |
選擇id=food節點的相鄰兄弟div元素
|
| preceding-sibling:: |
//*[@id=’food’]/preceding-sibling::div |
選擇id=food節點的前面的兄弟P元素
|
元素的相對定位:
如:
food = driver.find_element_by_id("food")
eles = food.find_elements_by_xpath('./p')
如果不加點 ,eles = food.find_elements_by_xpath('/p') 與 eles = driver.find_elements_by_xpath('/p') -----這兩個方式效果是一樣的
