python+selenium元素定位中接谨,css表達式功能非常強大,其強大之處在于:可以任意組合芽唇,聯(lián)合使用獲取元素肌厨,以下是結(jié)合各方資料學習后,整理的語法匯總往湿。
from selenium import webdriver
wb = webdriver.Chrome()
wb.get("http://www.baidu.com")
#窗口最大化
wb.maximize_window()
#添加等待時間
wb.implicitly_wait(5)
1、選擇單個元素&選擇多個元素
選擇單個元素語法:find_element_by_css_selector()
選擇多個元素語法:find_elements_by_css_selector()
多個元素時谱邪,通過for循環(huán)依次取出列表中元素
#1、選擇單個元素
element = wb.find_element_by_css_selector('#s_top_wrap')
print(element)
#2庶诡、選擇多個元素
elements = wb.find_elements_by_css_selector('#u > a')
#elements下有多個a標簽惦银,這里可用for循環(huán)依次取出
for element in elements:
# print(element)
# print(element.get_attribute('innerText'))
print(element.get_attribute('textContent'))
輸出結(jié)果為:
<selenium.webdriver.remote.webelement.WebElement (session="8047608c29e9e720e5f32ff7aba1245b", element="0.8778657659422606-3")>
百度首頁
設置
登錄
2、選擇父元素的直接子元素(父元素 > 子元素)
父元素的直接子元素指的是:父元素的直接下一級子節(jié)點末誓,例如:元素2是元素1的直接下一級子節(jié)點扯俱,那么元素2就是元素1的直接子元素
如下圖:
語法是:父元素 > 子元素
# 2、選擇父元素的直接子元素
elements = wb.find_elements_by_css_selector('#s-top-left > a')
for element in elements:
print(element.get_attribute('textContent'))
輸出結(jié)果:
新聞
hao123
地圖
視頻
貼吧
學術(shù)
3基显、選擇父元素的后代元素(父元素 子元素)
語法:父元素(空格)子元素
父元素和子元素之間用空格隔開
element = wb.find_element_by_css_selector('.s-top-more .c-font-normal')
print(element.get_attribute('textContent'))
輸出結(jié)果:
網(wǎng)盤
4蘸吓、通過屬性選擇元素
語法:使用中括號[]
# 4善炫、通過屬性選擇元素
element = wb.find_element_by_css_selector('[)
5撩幽、選擇多種元素
語法:用逗號隔開
# 5、選擇多種元素
elements = wb.find_elements_by_css_selector('.toindex,.pf')
for element in elements:
print(element.get_attribute('textContent'))
輸出結(jié)果:
<selenium.webdriver.remote.webelement.WebElement (session="165ab0827f6f29711e6f78dbdbf19f05", element="0.31190656078979373-11")>
百度首頁
設置
6箩艺、選擇父元素的第N個子節(jié)點
語法: 標簽:nth-child(n)
如下圖:獲取i標簽的第2個子節(jié)點元素:i:nth-child(2)
# 6窜醉、選擇父元素的第N個子節(jié)點
elements = wb.find_elements_by_css_selector('i:nth-child(2)')
print(elements)
7、選擇父元素的倒數(shù)第N個子節(jié)點
語法: i:nth-last-child(2)
# 7艺谆、選擇父元素的倒數(shù)第N個子節(jié)
element = wb.find_element_by_css_selector('i:nth-last-child(2)')
print(element)
8榨惰、選擇父元素的第N個某種類型的子節(jié)點
語法: i:nth-of-type(1)
# 8、選擇父元素的某種類型的子節(jié)點
elements = wb.find_elements_by_css_selector('i:nth-of-type(1)')
9静汤、選擇父元素下的奇數(shù)和偶數(shù)元素
語法:
偶數(shù):標簽:nth-child(even)
奇數(shù):標簽:nth-child(odd)
# 9琅催、選擇父元素下的奇數(shù)和偶數(shù)元素
#父元素下的偶數(shù)子節(jié)點元素
elements = wb.find_elements_by_css_selector('li:nth-child(even)')
#父元素下的奇數(shù)子節(jié)點元素
elements = wb.find_elements_by_css_selector('li:nth-child(odd)')
10、選擇兄弟節(jié)點
語法:
緊鄰兄弟節(jié)點:標簽1 + 標簽2
后面所有兄弟節(jié)點:標簽1 ~ 標簽2
# 10虫给、選擇兄弟節(jié)點
#div下的緊鄰a標簽
elements = wb.find_elements_by_css_selector('div+a')
#div下的所有a標簽
elements = wb.find_elements_by_css_selector('div~a')
以上是參考網(wǎng)上視頻資料等整理藤抡,后面如有新增,我會持續(xù)更新抹估,如有不妥之處缠黍,歡迎小伙伴們指正~~