当前位置: 首页 > news >正文

CSS选择器进行定位

  CSS选择器可以说是我们最常用也是最重要的一种元素定位方式,他可以通过元素的标签,ID,class等属性进行定位,在Selenium中通过By.CSS_SELECTOR,进行元素定位也就是:

driver.find_elements(By.CSS_SELECTOR,"")

  通过这种方式就可以获取到我们想要获取的元素,这里并不是一定要使用elements也可以是element只要是根据你要获取元素的数量决定。

  它可以替代通过id等属性进行定位元素,接下来我们通过一些案例进行讲述,假设我们要获取div标签下的所有内容:

elements = driver.find_elements(By.CSS_SELECTOR,"div")
for element in elements:print(element.get_attribute("outerHTML"))

  这样运行的结果为:

 

  当然如果我们相通过div的id属性来确定元素位置,我们可以直接使用id进行定位(通常情况下我们认为id是唯一的):

elements = driver.find_elements(By.CSS_SELECTOR,"#t1")
for element in elements:print(element.get_attribute("outerHTML"))

  通过这个我们会发现我们在CSS选择器时使用id进行定位,与单纯的使用By.ID的写法有所不同,我们需要再id前面加上“#”来声明它是个id,class也是一样,“.class名”通过这种方式可以通过classname进行元素的定位:

选择 子元素 和 后代元素:

  这是CSS选择器的一个非常重要的方式来进行元素的定位:

<div id='container'><div id='layer1'><div id='inner11'><span>内层11</span></div><div id='inner12'><span>内层12</span></div></div><div id='layer2'><div id='inner21'><span>内层21</span></div></div></div>

  以这段html为例,这个id为container是id为layer1和layer2的父元素,同理inner11是layer1的子元素,但是这两个id都为container的后代元素,而layer1和layer2为container的直接子元素(这一点我们后续要用到),inner11是layer1的直接子元素。

  如果我们想要通过这种方式确定元素的位置需要遵守一定的规则如果是直接子元素需要使用“>”进行指定比如“#container > #layer1”,如果通过后代元素来确定位置,使用空格“ ”,例如“#container inner11”表示inner11为container的后代(无论隔了多少代,总之表示它的后代),接下来我们通过一些用例来检验我们的说明是否正确:

elements = driver.find_elements(By.CSS_SELECTOR,"#container > #layer1")
for element in elements:print(element.get_attribute("outerHTML"))

  结果为:

 

   如果使用空格后代元素,来确定元素的位置:

elements = driver.find_elements(By.CSS_SELECTOR,"#container  #inner11")
for element in elements:print(element.get_attribute("outerHTML"))

  结果为:

 

  

   

http://www.lryc.cn/news/585875.html

相关文章:

  • 开源 python 应用 开发(五)python opencv之目标检测
  • Android音视频探索之旅 | C++层使用OpenGL ES实现音频渲染
  • 10. 垃圾回收的算法
  • 【字符串移位包含问题】2022-8-7
  • 【飞算JavaAI】一站式智能开发,驱动Java开发全流程革新
  • 缺陷特征粘贴增强流程
  • 13. G1垃圾回收器
  • git版本发布
  • Kotlin基础学习记录
  • 基于定制开发开源AI智能名片S2B2C商城小程序的社群游戏定制策略研究
  • 云计算三大服务模式深度解析:IaaS、PaaS、SaaS
  • AI:机器人行业发展现状
  • GoC之汉诺塔绘制
  • Leaflet面试题及答案(41-60)
  • 电商广告市场惊现“合规黑洞”,企业如何避免亿元罚单
  • 11. JVM中的分代回收
  • JVM的垃圾回收算法和多种GC算法
  • 9. JVM垃圾回收
  • Opencv---深度学习开发
  • 初阶数据结构易错点整理
  • leetcode:HJ18 识别有效的IP地址和掩码并进行分类统计[华为机考][字符串]
  • 华为IPD(集成产品开发)流程是其研发管理的核心体系
  • Edge浏览器:报告不安全的站点的解决方案
  • 用YOLOv5系列教程(1)-用YOLOv5轻松实现设备状态智能监控!工业级教程来了
  • (C++)STL标准库(vector动态数组)(list列表)(set集合)(map键值对)相关对比,基础教程
  • 【Lucene/Elasticsearch】**Query Rewrite** 机制
  • U盘直接拔出不在电脑上弹出有何影响
  • 张量拼接操作
  • 文件上传漏洞2-常规厂商检测限制绕过原理讲解
  • 【学习笔记】Nginx常用安全配置