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('博客园')
金鳞岂是池中物,一遇风云便化龙。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库