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

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

首先,基础的CSS选择器

选择器 名字 例子 例子描述
基础选择器
.class class选择器 .intro 选择 class=“intro” 的所有元素。
#id id选择器 #firstname 选择 id=“firstname” 的所有元素。
* 通配符 选择所有元素。
element 标签选择器 p 选择所有

元素。

多层选择器
element,element 分组选择器 div,p 同时选择所有
元素和所有

元素。

element element 后端选择器 div p 选择
元素内部的所有

元素(包括子元素、孙子元素)

element>element 子元素选择器 div>p 选择
元素下的

子元素

element+element 相邻选择器 div+p 选择
元素之后的所有兄弟

元素。

属性选择器
[attribute] [target] 选择带有 target 属性所有元素。
[attribute=value] [target=_blank] 选择 target=“_blank” 的所有元素。
[attribute*=value] a[href*=“miitbeian”] 选择a节点,里面的href属性包含了 miitbeian 字符串
[attribute^=value] a[href^=“http”] 要选择a节点,里面的href属性以 http 开头
[attribute$=value] a[href$=“gov.cn”] 选择a节点,里面的href属性以 gov.cn 结尾
[attribute~=value] [title~=flower] 选择 title 属性包含单词 “flower” 的所有元素。
[attribute|=value] [lang|=en] 选择 lang 属性值以 “en” 开头的所有元素。

如果一个元素具有多个属性

<div class="misc" ctype="gun">沙漠之鹰</div>

CSS 选择器 可以指定 选择的元素要 同时具有多个属性的限制,像这样 div[class=misc][ctype=gun]

html页面中,css正确写法的栗子

/* id选择器 */
#abc {
    color: #cc0000;
    font-size: 12px;
}

/* class 选择器 */
.down {
    color: #66cc66;
}

/* 标签选择器 */
p {
    background: cornflowerblue;
}

/* 标签选择器可以与class选择器组合使用 */
p.down {
    font-size: 24px;
}

/* 分组选择器 */
ul,
div,
.up {
    color: #cc0000;
}

/* 属性选择器 */
[href] {
    color: #cc6600;
}

span[title="hello"] {
    color: #00FFFF;
}

span[title~="python"] {
    font-size: 24px;
}

/* 后代选择器 */
div li {
    background: forestgreen;
}

/* 子元素选择器 */
div[id="up"]>ul {
    color: #cc6600;
}

/* 相邻兄弟选择器 */
#down+li {
    font-size: 24px;
}

/* 后续兄弟选择器 */
#down~li {
    color: #cc0000;
}

然后,伪类选择器

选择器 例子 例子描述
:first-child p:first-child 选择属于父元素的第一个子元素的每个

元素。

:nth-child(n) p:nth-child(2) 选择属于其父元素的第二个子元素的每个

元素。

:nth-last-child(n) p:nth-last-child(2) 同上,从最后一个子元素开始计数。
:nth-of-type(n) p:nth-of-type(2) 选择属于其父元素第二个

元素的每个

元素。

:nth-last-of-type(n) p:nth-last-of-type(2) 同上,但是从最后一个子元素开始计数。
:last-child p:last-child 选择属于其父元素最后一个子元素每个

元素。

举例说明

参照白月黑羽的网址去练习

语法格式:
通过 CSS Selector 选择单个元素的方法是

find_element(By.CSS_SELECTOR, CSS Selector参数)

选择所有元素的方法是

find_elements(By.CSS_SELECTOR, CSS Selector参数)

根据 tag名、id、class 选择元素

tag名

比如 要选择 所有的tag名为div的元素,就可以是这样

elements = wd.find_elements(By.CSS_SELECTOR, 'div')

等价于

elements = wd.find_elements(By.TAG_NAME, 'div')

id

根据id属性 选择元素的语法是在id号前面加上一个井号: #id值

有下面这样的元素:

<input  type="text" id='searchtext' />

就可以使用 #searchtext 这样的 CSS Selector 来选择它。

  element = wd.find_element(By.CSS_SELECTOR, '#searchtext')

等价于

element = wd.find_element(By.ID, 'searchtext')

class

根据class属性 选择元素的语法是在 class 值 前面加上一个点: .class值
要选择所有 class 属性值为 animal的元素 动物 除了这样写

elements = wd.find_elements(By.CLASS_NAME, 'animal')

等价于

elements = wd.find_elements(By.CSS_SELECTOR, '.animal')

选择 子元素 和 后代元素

选择 子元素

如果 元素2 是 元素1 的 直接子元素, CSS Selector 选择子元素的语法是这样的
元素1 > 元素2
也支持更多层级的选择, 比如
元素1 > 元素2 > 元素3 > 元素4
就是选择 元素1 里面的子元素 元素2 里面的子元素 元素3 里面的子元素 元素4 , 最终选择的元素是 元素4

后代元素

如果 元素2 是 元素1 的 后代元素, CSS Selector 选择后代元素的语法是这样的
元素1 元素2
中间是一个或者多个空格隔开
最终选择的元素是 元素2 , 并且要求这个 元素2 是 元素1 的后代元素。
也支持更多层级的选择, 比如
元素1 元素2 元素3 元素4
最终选择的元素是 元素4

根据属性选择

  <a href="https://beian.miit.gov.cn" rel="noopener noreferrer">浙ICP备2022000717号-1</a>

根据属性选择元素

  # 比如要选择上面的a元素,就可以使用 [https://beian.miit.gov.cn"] 
  element = wd.find_element(By.CSS_SELECTOR, '[href="https://beian.miit.gov.cn"]')
  
  # 要选择a节点,里面的href属性包含了 miit 字符串,就可以这样写
  element = wd.find_element(By.CSS_SELECTOR, 'a[href*="miit"]')
  
  # 要选择a节点,里面的href属性以 http 开头 ,就可以这样写
    element = wd.find_element(By.CSS_SELECTOR, ' a[href^="http"]')
  
  #  要选择a节点,里面的href属性以 gov.cn 结尾 ,就可以这样写
    element = wd.find_element(By.CSS_SELECTOR, ' [href$="gov.cn"]')