本章主要學習利用css_selector定位元素,通過百度搜索編輯框進行學習

CSS選擇器的常見語法

find_element_by_css_selector()方法用於 CSS 語言定位元素
一、通過 class 屬性定位:
1 # coding=utf-8 2 from selenium import webdriver 3 import time 4 5 driver = webdriver.Chrome() 6 driver.maximize_window() 7 driver.implicitly_wait(5) 8 9 driver.get("http://www.baidu.com") 10 try: 11 driver.find_element_by_css_selector(".s_ipt").send_keys("selenium") 12 driver.find_element_by_css_selector(".bg.s_btn").click() 13 time.sleep(3) 14 print("測試通過,CSS定位成功") 15 except Exception as e: 16 print("測試失敗,CSS定位失敗", format(e)) 17 driver.quit()
點號(.)表示通過 class 屬性來定位元素。
注意:
class屬性中間的空格並不是空字符串,那是間隔符號,表示的是一個元素有多個class的屬性名稱,在整個HTML文檔,使用CSS中的同一個class類可能是一個或多個!
解決方式:
1.class屬性唯一但是有空格,選擇空格兩邊唯一的哪一個。
2.class屬性不唯一的話,可以用復數定位,把所有相同元素定位出來,取第幾個就行。
3.class多個屬性時要給元素前面加個點(.)就行,然后空格變成了點(.)就能定位了。
至於其它的方法應該還有,但是我們不需要全部掌握,只需要達到目的(准確定位到元素)即可
二、通過 id 屬性定位:
1 # coding=utf-8 2 from selenium import webdriver 3 import time 4 5 driver = webdriver.Chrome() 6 driver.maximize_window() 7 driver.implicitly_wait(5) 8 9 driver.get("http://www.baidu.com") 10 try: 11 driver.find_element_by_css_selector("#kw").send_keys("selenium") 12 driver.find_element_by_css_selector("#su").click() 13 time.sleep(3) 14 print("測試通過,CSS定位成功") 15 except Exception as e: 16 print("測試失敗,CSS定位失敗", format(e)) 17 driver.quit()
井號(#)表示通過 id 屬性來定位元素。
三、通過標簽名定位:
在 CSS 語言中用標簽名定位元素不需要任何符號標識,直接使用標簽名即可,但我們前面已經了解到標簽名重復的概率非常大,所以通過這種方式很難唯一的標識一個元素。
目前我還沒學會
四、通過父子關系定位:
1 # coding=utf-8 2 from selenium import webdriver 3 import time 4 5 driver = webdriver.Chrome() 6 driver.maximize_window() 7 driver.implicitly_wait(5) 8 9 driver.get("http://www.baidu.com") 10 try: 11 driver.find_element_by_css_selector("span>input").send_keys("selenium") 12 driver.find_element_by_css_selector("span>input").click() 13 time.sleep(3) 14 print("測試通過,CSS定位成功") 15 except Exception as e: 16 print("測試失敗,CSS定位失敗", format(e)) 17 driver.quit()
上面的寫法表示有父親元素,它的標簽名叫 span,查找它的所有標簽名叫 input 的子元素。
五、通過屬性定位:
1 # coding=utf-8 2 from selenium import webdriver 3 import time 4 5 driver = webdriver.Chrome() 6 driver.maximize_window() 7 driver.implicitly_wait(5) 8 9 driver.get("http://www.baidu.com") 10 try: 11 driver.find_element_by_css_selector("input[autocomplete='off']").send_keys("selenium") 12 driver.find_element_by_css_selector("input[value='百度一下']").click() 13 time.sleep(3) 14 print("測試通過,CSS定位成功") 15 except Exception as e: 16 print("測試失敗,CSS定位失敗", format(e)) 17 driver.quit()
在 CSS 當中可以使用元素的任意屬性,只要這些屬性可以唯一的標識這個元素。
六、組合定位:
1 # coding=utf-8 2 from selenium import webdriver 3 import time 4 5 driver = webdriver.Chrome() 6 driver.maximize_window() 7 driver.implicitly_wait(5) 8 9 driver.get("http://www.baidu.com") 10 try: 11 driver.find_element_by_css_selector("span.bg.s_ipt_wr>input.s_ipt").send_keys("selenium") 12 driver.find_element_by_css_selector("span.bg.s_btn_wr>input#su").click() 13 time.sleep(3) 14 print("測試通過,CSS定位成功") 15 except Exception as e: 16 print("測試失敗,CSS定位失敗", format(e)) 17 driver.quit()
有一個父元素,它的標簽名叫 span,它有一個 class 屬性值叫 bg s_ipt_wr,它有一個子元素,標簽名叫 input,並且這個子元素的 class 屬性值叫 s_ipt。
