1. 程式人生 > 其它 >Python-元素定位API之Css_selector

Python-元素定位API之Css_selector

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('部落格園')