selenium:css_selector定位详解(css selector和xpath的比较)

来源:https://www.cnblogs.com/haifeima/p/10138154.html

 

selenium使用css selector和xpath的比较

selenium提供的定位方式(常用)

  • ID
  • NAME
  • CLASS
  • CSS SELECTOR
  • XPATH
 

推荐的定位方式的优先级

  • 优先级最高:ID
  • 优先级其次:name
  • 优先级再次:CSS selector
  • 优先级再次:Xpath
 

针对css selector和xpath的优先级做一个简单的说明

在项目中我们可能用的最多的是css或者xpath,那么针对这两种,我们优先选择css,原因在哪些?
  • 原因1:css是配合html来工作,它实现的原理是匹配对象的原理,而xpath是配合xml工作的,它实现的原理是遍历的原理,所以两者在设计上,css性能更优秀
  • 原因2:语言简洁,明了,相对xpath
  • 原因3:前段开发主要是使用css,不使用xpath,所以在技术上面,我们可以获得帮助的机会非常多
题外话:据说xpath和css现在基本没有什么太大的区别了,css已经实现了大多数的xpath功能,只有个别功能没有实现。具体的数据列证还需要找更多的数据进行填充。
 
 

定位元素的注意事项(划重点)

  • 找到待定位元素的唯一属性
  • 如果该元素没有唯一属性,则先找到能被唯一定位到的父元素/子元素/相邻元素,再使用“>”," ","+"等进行辅助定位。
  • 不要使用随机唯一属性定位
  • 最重要的是多跟研发沟通,尽量把关键元素加上ID或者name,并减少不合理的页面元素,例如重复ID这样的事情最好不要发生。

selenium之CSS定位汇总

以百度首页为例:

定位输入框

一:单一属性定位

1:type selector

driver.find_element_by_css_selector('input')

2:id 定位

driver.find_element_by_css_selector('#kw')

3:class 定位

driver.find_element_by_css_selector('.s_ipt')

4:其他属性定位

driver.find_element_by_css_selector('[name='wd']')

driver.find_element_by_css_selector("[type='text']")

二:组合属性定位

1:id组合属性定位

driver.find_element_by_css_selector("input#kw")

2:class组合属性定位

driver.find_element_by_css_selector("input.s_ipt")

3:其他属性组合定位

driver.find_element_by_css_selector("input[name='wd']")

4:仅有属性名,没有值也可以

driver.find_element_by_css_selector("input[name]")

5:两个其他属性组合定位

driver.find_element_by_css_selector("[name='wd'][autocomplete='off']")

6:模糊匹配属性值方法

以百度首页点击按钮为例

1>属性值由多个空格隔开,匹配其中一个值的方法

driver.find_element_by_css_selector("input[class~='btn']")

2>匹配属性值为字符串开头的方法

driver.find_element_by_css_selector("input[class^='btn']")

3>匹配属性值字符串结尾的方法

driver.find_element_by_css_selector("input[class$='s_btn']")

4>匹配被-分割的属性值的方法,如上图的class

driver.find_element_by_css_selector("input[class|='s']")  #要求精确填写的属性值

三:层级定位

1:E>F    E下面的F这个元素

driver.find_element_by_css_selector('from#form>span>input')#id是form的form下面的span下面的input

2:E:nth-child(n)  如上图,

driver.find_element_by_css_selector('#u_sp > a:nth-child(1)')#id为u_sp的下面的第一个a标签。

#实测,这个定位不到,但是方法是对的,- -

3:E:nth-last-child(n),如字面意思:倒数第几个标签

4:E:first-child,第一个标签

5:E:last-child,最后一个标签

6:E:only-child,唯一的标签

selenium:css_selector定位详解的更多相关文章

  1. xpath与css_selector定位详解

    例题:分别用xPath和css_selector定位下图的img标签 答案:  xpath:.//*[@id='fstscr']/div[3]/div[2]/a/img css_selector: . ...

  2. selenium:css_selector定位详解(css selector和xpath的比较)

    selenium使用css selector和xpath的比较 selenium提供的定位方式(常用) ID NAME CLASS CSS SELECTOR XPATH   推荐的定位方式的优先级 优 ...

  3. Python爬虫之selenium库使用详解

    Python爬虫之selenium库使用详解 本章内容如下: 什么是Selenium selenium基本使用 声明浏览器对象 访问页面 查找元素 多个元素查找 元素交互操作 交互动作 执行JavaS ...

  4. 小甲鱼PE详解之基址重定位详解(PE详解10)

    今天有一个朋友发短消息问我说“老师,为什么PE的格式要讲的这么这么细,这可不是一般的系哦”.其实之所以将PE结构放在解密系列继基础篇之后讲并且尽可能细致的讲,不是因为小甲鱼没事找事做,主要原因是因为P ...

  5. 带你走进CSS定位详解

    学习CSS相关知识,定位是其中的重点,也是难点之一,如果不了解css定位有时候都不知道怎么用,下面整理了一下关于定位属性的具体理解和应用方案. 一:定位 定位属性列表 position top bot ...

  6. iOS 后台持续定位详解(支持ISO9.0以上)

    iOS 后台持续定位详解(支持ISO9.0以上) #import <CoreLocation/CoreLocation.h>并实现CLLocationManagerDelegate 代理, ...

  7. 多测师讲解自动化测试 _RF课堂_定位详解(002上午)_高级讲师肖sir

    1,打开克览器 2.id定位 Input Text id=kw 我是id定位 #id定位方法 3.name定位 Input Text name=wd 我是name定位方法 #我是name定位方法 4. ...

  8. CSS进阶内容—浮动和定位详解

    CSS进阶内容-浮动和定位详解 我们在学习了CSS的基本知识和盒子之后,就该了解一下网页的整体构成了 当然如果没有学习之前的知识,可以到我的主页中查看之前的文章:秋落雨微凉 - 博客园 CSS的三种布 ...

  9. selenium:Xpath定位详解

    xpath定位在业界被戏称为元素定位的"屠龙宝刀",宝刀在手,武林我有.现在我们就来详解xpath定位方法. 一.xpath通过元素属性定位 xpath可以通过元素的属性来定位,如 ...

随机推荐

  1. Avro从入门到入土

    avro官网 1.Avro历史 Avro是Hadoop的一个数据序列化系统,由Hadoop的创始人Doug Cutting(也是Lucene,Nutch等项目的创始人)开发,设计用于支持大批量数据交换 ...

  2. 【转】linux中fork()函数详解

    原文链接:http://blog.csdn.net/jason314/article/details/5640969#comments 总结:面宝P268 fork()的意思是进程从这里开始分叉,分成 ...

  3. Atcoder Regular Contest 066 F genocide【JZOJ5451】

    题目 分析 \(s[i]\)表示a前缀和. 设\(f[i]\)表示做完了1~i的友谊颗粒的最优值(不一定选i),那么转移方程为 \[f[i]=max\{f[i-1],max\{f[j]-s[i]+s[ ...

  4. shell中+,*,[:space:]的用法

    http://blog.itpub.net/27181165/viewspace-1061688/ 在linux中通常会使用shell结合正则表达式来过滤字符,本文将以一个简单的例子来说明+,*,[: ...

  5. List集合遍历的三种方法

    测试数据: List<String> list = new ArrayList<String>(); list.add("java"); list.add( ...

  6. IE浏览器如何实现断点续传

    需求: 支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验: 内网百兆网络上传速度为12MB/S 服务器内存占用低 支持文件夹上传,文件夹中的文件数量达到1万个以上,且包 ...

  7. 1502: [NOI2005]月下柠檬树

    一堆圆台平行光的投影 在草稿纸上画一下,发现对于一个圆,它投影完还是一个半径不变的圆. 定义树的轴在投影平面上经过的点为原点,定一个正方向,建立平面直角坐标系, 能发现,对于一个半径为\(r\),高度 ...

  8. 导数与微分简单总结(updated)

    只讲一些导数在OI中的简单应用,特别基础的东西,不会很详细也不会很全面. 导数的定义 设函数\(y=f(x)\)在点\(x_0\)的某个邻域内有定义,当自变量\(x\)在\(x_0\)处有增量\(Δx ...

  9. js添加删除class

    添加: obj.classList.add("active"); 删除:obj.classList.remove("active");例子 <button ...

  10. [CSP-S模拟测试]:真相(模拟)

    题目传送门(内部题106) 输入格式 第一行为一个正整数$T$,表示数据组数. 接下来$T$组数据,每组数据第一行一个正整数$n$表示$OIer$,接下来$n$行,第$i$行表示编号为$i$的人所说的 ...