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('博客园')
 
posted @ 2021-08-29 17:00  码·蚁  阅读(471)  评论(0编辑  收藏  举报