Python-元素定位API之Css_selector
阿新 • • 發佈:2021-08-29
1、通過絕對路徑定位
絕對路徑是從網頁的根節點html開始,逐層去查詢需要定位的元素
此方法缺點顯而易見,當元素位置發生改變時,都需要修改,因此,並不推薦使用
舉例:百度搜索框絕對路徑定位
#絕對路徑 id屬性用
# class屬性用. 自定向下
# driver.find_element_by_css_selector('html body div#wrapper div#head div#head_wrapper div.s_form.s_form_nologin div.s_form_wrapper.soutu-env-nomac.soutu-env-index form#form span.bg.s_ipt_wr.quickdelete-wrap input#kw').send_keys('部落格園')
備註:
當同一層次有多個相同的元素時,使用id或class區分,遇到id用#號,遇到class用.號
2、通過相對路徑定位
相對路徑表示檔案中所有符合模式的元素都會被選出來,即使是處於樹中不同的層級也會被選出來
舉例:百度搜索框相對路徑定位
#相對路徑 自低向上
# driver.find_element_by_css_selector('input#kw').send_keys('部落格園')
# driver.find_element_by_css_selector('span.bg.s_ipt_wr.quickdelete-wrap input#kw').send_keys('部落格園')
備註:
以上都可以定位到百度搜索框,相對路徑的長度和開始位置並不受限制,可以採用從後往前逐層定位到即可的方法去定位
3、使用元素屬性定位
元素屬性定位要求能夠定位到唯一一個元素,如果存在多個相同條件的標籤,預設定位第一個,具體格式 //標籤名[屬性名="屬性值"]
支援使用多個屬性一起定位元素
舉例:
#屬性定位
# driver.find_element_by_css_selector('input[maxlength="255"]').send_keys('部落格園')
#多屬性定位 只支援and的效果
# driver.find_element_by_css_selector('input[maxlength="255"][id="kw"]').send_keys('部落格園')
4、使用部分屬性值匹配(也稱為模糊方法定位)
屬性值如果太長或網頁中的元素屬性動態變化,可以使用此方法
元素屬性值開頭包括內容:^=
# 模糊定位、稱為部分屬性值定位
#^=以什麼屬性內容開頭
# driver.find_element_by_css_selector('a[href^="http://news"]').click()
元素屬性值結尾包含內容:$=
#$=以什麼屬性內容結尾
# driver.find_element_by_css_selector('a[href$="news.baidu.com"]').click()
元素屬性值包含的內容:*=
#*=包含什麼屬性內容
# driver.find_element_by_css_selector('a[href*="news.baidu"]').click()
5、查詢子元素
1)子元素 A>B
#子元素 A>B
# driver.find_element_by_css_selector('form>span>input').send_keys('部落格園')
2)後代元素 A空格B(類似>)
# 後代元素 A B
# driver.find_element_by_css_selector('form span input').send_keys('部落格園')
3)第一個後代元素:first-child
#第一個後代元素 :first-child
# driver.find_element_by_css_selector('div#s-top-left a:first-child').click()
4)最後一個後代元素:last-child
#最後一個後代元素 :last-child
# driver.find_element_by_css_selector('div#s-top-left a:last-child').click()
5)第n個子元素 :nth-child(N) [類同:nth-of-type(N)]
#第N個子元素 :nth-child() 或 nth-of-type()
# driver.find_element_by_css_selector('div#s-top-left a:nth-child(3)').click()
# driver.find_element_by_css_selector('div#s-top-left a:nth-of-type(3)').click()
6、查詢兄弟元素
1)同層級下一個元素 +
#兄弟元素 +
# driver.find_element_by_css_selector('div#s-top-left a +a +a').click()
2)選擇同層級多個相同標籤的元素
#選擇同層級多個相同標籤的元素
# es=driver.find_elements_by_css_selector('div#s-top-left a ~a') # print(type(es),len(es)) # es[2].click()
備註:
+號可以多次使用
~號一般返回的是多個元素,要用find_elements接收
定位元素程式碼形式:
from selenium.webdriver.common.by import By
#新的定位語法 更適合用在框架
# driver.find_element(By.ID,"kw").send_keys('部落格園')
# driver.find_element(By.XPATH,'//input[@id="kw"]').send_keys('部落格園')