我們繼續研究定位方法,還是那一句話,定位方法不會,就沒有辦法進行代碼點點點。上一篇介紹了XPath的方法,這一篇介紹一些Css,Css相比與XPath來說,更加復雜點,但是Css定位速度比XPath方法要快,書寫更加簡單。
Css
層疊樣式表(英文全稱:Cascading Style Sheets)是一種用來表現HTML(標准通用標記語言的一個應用)或XML(標准通用標記語言的一個子集)等文件樣式的計算機語言。CSS不僅可以靜態地修飾網頁,還可以配合各種腳本語言動態地對網頁各元素進行格式化。CSS選擇器可以較為靈活地選擇控件的任意屬性,一般情況下,CSS定位速度比XPath定位速度快。
Css學習文檔:https://www.w3school.com.cn/cssref/css_selectors.asp
Css選擇器常用語法
選擇器 | 例子 | 例子描述 |
---|---|---|
.class | .intro | 選擇 class="intro" 的所有元素。 |
#id | #firstname | 選擇 id="firstname" 的所有元素。 |
* | * | 選擇所有元素。 |
element | p | 選擇所有 <p> 元素。 |
element,element | div,p | 選擇所有 <div> 元素和所有 <p> 元素。 |
element element | div p | 選擇 <div> 元素內部的所有 <p> 元素。 |
element>element | div>p | 選擇父元素為 <div> 元素的所有 <p> 元素。 |
element+element | div+p | 選擇緊接在 <div> 元素之后的所有 <p> 元素。 |
[attribute] | [target] | 選擇帶有 target 屬性所有元素。 |
[attribute=value] | [target=_blank] | 選擇 target="_blank" 的所有元素。 |
[attribute~=value] | [title~=flower] | 選擇 title 屬性包含單詞 "flower" 的所有元素。 |
[attribute|=value] | [lang|=en] | 選擇 lang 屬性值以 "en" 開頭的所有元素。 |
Css實例定位
1、通過Class定位
Class定位通過.來進行表示
# coding:utf-8 from selenium import webdriver driver = webdriver.Chrome() driver.get('https://www.baidu.com/') # 通過Css中的class定位 driver.find_element_by_css_selector('.s_ipt').send_keys('測試-安靜博客園')
2、通過id定位
Id定位通過#來表示
# coding:utf-8 from selenium import webdriver driver = webdriver.Chrome() driver.get('https://www.baidu.com/') # 通過id定位,id通過#表示 driver.find_element_by_css_selector('#kw').send_keys('測試-安靜博客園')
3、通過標簽名
Css中可以直接通過標簽名進行匹配
# coding:utf-8 from selenium import webdriver driver = webdriver.Chrome() driver.get('https://www.baidu.com/') # 通過標簽名定位 driver.find_element_by_css_selector('input')
4、通過屬性來定位
# coding:utf-8 from selenium import webdriver driver = webdriver.Chrome() driver.get('https://www.baidu.com/') # 通過屬性定位 driver.find_element_by_css_selector('[autocomplete="off"]').send_keys('測試-安靜博客園') # 通過name屬性定位 # driver.find_element_by_css_selector('[name="wd"]').send_keys('測試-安靜博客園')
5、通過組合形式進行定位
通過父級或者爺爺級別進行定位
# coding:utf-8 from selenium import webdriver driver = webdriver.Chrome() driver.get('https://www.baidu.com/') # 通過父級組合形式 driver.find_element_by_css_selector('span > input#kw').send_keys('測試-安靜博客園')
# 通過元素形式
# driver.find_element_by_css_selector('input#kw').send)keys('測試-安靜博客園')
6、通過包含元素內容定位
這里比如class中以s_ipt開頭的
# coding:utf-8 from selenium import webdriver driver = webdriver.Chrome() driver.get('https://www.baidu.com/') # 查看已元素內容開頭 driver.find_element_by_css_selector("[class^='s_ipt']").send_keys('測試-安靜博客園')
7、 通過以元素結尾內容定位
# coding:utf-8 from selenium import webdriver driver = webdriver.Chrome() driver.get('https://www.baidu.com/') # 查看kw元素結尾定位 driver.find_element_by_css_selector("[id$='kw']").send_keys('測試-安靜博客園')
更多的定位方法可以查看官方文檔或者在網上查看一些教程,安靜只是列出了一些安靜常用到的定位方法。
還是老話,定位方法比較多,個人進行對比,那種適合自己就選擇那種,定位方法學不會,自動化就沒有辦法進行開展。