selenium总结-css 定位高级语法

文章目录

  • 推荐的定位方式的优先级
  • 定位元素的注意事项(划重点)
  • CSS选择器组成
  • id 选择器
  • class 选择器
  • 标签选择器
  • 分组选择器
  • 属性选择器
  • 组合选择符
  • 伪类
  • 最佳实践

推荐的定位方式的优先级

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

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

在项目中我们可能用的最多的是css或者xpath,那么针对这两种,我们优先选择css,原因在哪些?

  • 原因1:css是配合html来工作,它实现的原理是匹配对象的原理,而xpath是配合xml工作的,它实现的原理是遍历的原理,所以两者在设计上,css性能更优秀
  • 原因2:语言简洁,明了,相对xpath
  • 原因3:前段开发主要是使用css,不使用xpath,所以在技术上面,我们可以获得帮助的机会非常多

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

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

CSS选择器组成

CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明:
在这里插入图片描述

id 选择器

id 选择器可以选中具有特定 id 的 HTML 元素
CSS 中 id 选择器以 “#” 来定义。

element_id = driver.find_elements("css selector", "#abc")

class 选择器

class 选择器可以选中具有特定 class 属性的 HTML 元素
在 CSS 中,class 选择器以 ".“号 来定义,若有空格,亦可以”."来代替

element_class = driver.find_elements("css selector", ".abc")

标签选择器

标签选择器可以选中同类型的 html 标签元素
在以下的例子中,将所有的 p 标签设置为红色
p. {color:red;}

另外,你可以将标签选择器与属性选择器结合起来使用
以下,会将所有 class 属性为 re 的元素变成红色
p.re {color:red;}

分组选择器

分组选择器可以选中一组 HTML 元素
在 css 中,分组选择器以 “,” 来定义
以下实例,会将所有的 h1 标签、h2 标签、p 标签的内容变成红色

h1,h2,p
{color:green;
}

属性选择器

element_shuxing= driver.find_elements("css selector", "[title]")element_shuxing1 = driver.find_element("css selector","[title=ab1]")element_shuxing2 = driver.find_element("css selector","[title~='ab1']")

组合选择符

后代选择器(以空格分隔)
子元素选择器(以大于号分隔)
相邻兄弟选择器(以加号分隔)
后续兄弟选择器(以小波浪号分隔)

伪类

nth-child(n) 匹配属于其父元素的第 N 个子元素

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

nth-of-type(n),第 N 个指定类型的标签

first-child,第一个标签

last-child,最后一个标签

最佳实践

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>css 语法学习</title><style>/* id 选择器 *//*  css 中 id 选择器以 # 来定义  */#abc {color: #0044bb;}/*class 选择器*//*css 中 class 选择器以 . 来定义*/.abc {color: #cc0000;}/*标签选择器*//*标签选择器可以选中同类型的 html 标签元素*/p.abc {background: #222222;}/*分组选择器*//*选中一组 html 元素*//*在 css 当中,分组选择器以 , 来定义*/p, a {font-size: 20px;}/*属性选择器*//*属性选择器选择具有特定属性的 html 元素*//*css 当中属性选择器以 [] 来定义*//*以下实例,选中所有具有 title 属性的标签*/[title] {color: #0044bb;}/*可以为属性指定值*/[title="ab1"] {background: #222222;}/*也可以指定标签类型*/p[name] {color: #cc0000;}p[class~="world"] {color: #cc0000;}</style>
</head>
<body>
<p id="abc">汉皇重色思倾国,御宇多年求不得</p>
<p class="abc">杨家有女初长成,养在深闺人未识</p>
<a>天生丽质难自弃,一朝选在君王侧</a>
<br>
<a title="ab1">回眸一笑百媚生,六宫粉黛无颜色</a>
<p title="ab2">春寒赐浴华清池,温泉水滑洗凝脂</p>
<p name="ab1">侍儿扶起娇无力</p>
<p class="hello world">云鬓花颜金步摇,芙蓉帐暖度春宵</p></body>
</html>
# -*- coding: utf-8 -*-
# @project : day5
# @author: lw
# @file: studyCss.py
# @ide: PyCharm
# @time: 2024/1/29
import timefrom selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManagerservice = ChromeService(executable_path=ChromeDriverManager().install())driver = webdriver.Chrome(service=service)
fileHtml1 = "file:///Users/liwei/Downloads/%E8%85%BE%E8%AE%AF%E8%AF%BE%E5%A0%8237-38%E6%9C%9F2020-7-8/day3/test.html"
driver.get(fileHtml1)element_id = driver.find_elements("css selector", "#abc")
print("css selector id选择器: ")
for element in element_id:print(element.text)print("================================================")
element_class = driver.find_elements("css selector", ".abc")
print("css selector class选择器: ")
for element in element_class:print(element.text)print("================================================")
element_biaoqian = driver.find_elements("css selector", "p.abc")
print("css selector 标签选择器: ")
for element in element_biaoqian:print(element.text)
print("================================================")
print("css selector 属性选择器: ")
element_shuxing= driver.find_elements("css selector", "[title]")
for element in element_shuxing:print(element.text)
element_shuxing1 = driver.find_element("css selector","[title=ab1]")
print(element_shuxing1.text)
element_shuxing2 = driver.find_element("css selector","[title~='ab1']")
print(element_shuxing2.text)print("================================================")
print("css selector 分组选择器: ")
element_p = driver.find_elements("css selector", "p.abc,a[title=ab1]")
for element in element_p:print(element.text)print("================================================")
print("css selector 组合选择器: ")
element_a = driver.find_elements("css selector","body a")
print("后代选择器--")
for element in element_a:print(element.text)element_b = driver.find_elements("css selector","body>a")
print("子元素选择器--")
for element in element_b:print(element.text)driver.quit()

css selector id选择器:
汉皇重色思倾国,御宇多年求不得
================================================
css selector class选择器:
杨家有女初长成,养在深闺人未识
================================================
css selector 标签选择器:
杨家有女初长成,养在深闺人未识
================================================
css selector 属性选择器:
回眸一笑百媚生,六宫粉黛无颜色
春寒赐浴华清池,温泉水滑洗凝脂
回眸一笑百媚生,六宫粉黛无颜色
回眸一笑百媚生,六宫粉黛无颜色
================================================
css selector 分组选择器:
杨家有女初长成,养在深闺人未识
回眸一笑百媚生,六宫粉黛无颜色
================================================
css selector 组合选择器:
后代选择器–
天生丽质难自弃,一朝选在君王侧
回眸一笑百媚生,六宫粉黛无颜色
子元素选择器–
天生丽质难自弃,一朝选在君王侧
回眸一笑百媚生,六宫粉黛无颜色
Process finished with exit code 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/439161.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

APT32F1023X 发送RF433处理

1.硬件电路--CMT2110A 需要注意&#xff1a;发射端MCU写数据的频率要匹配&#xff0c;如果MCU发送中时间最小脉宽是1MS&#xff0c;那么它的发送需要设置为1kbps。 通过华普微USB调试工具PC软件RFPDK_V1.55查看设置是否正确。 2.RF433发送 用到的发送和接收代码来自“无线433发…

状态接上一章

1.状态恢复 parceable pluginManagement {repositories {google()mavenCentral()gradlePluginPortal()}//插件plugins{id("com.android.application")version("7.1.0-alpha05")id("com.android.library")version("7.1.0-alpha05")id(…

【C/C++ 06】基数排序

基数排序是桶排序的一种&#xff0c;算法思路为&#xff1a; 利用队列进行数据收发创建一个队列数组&#xff0c;数组大小为10&#xff0c;每个元素都是一个队列&#xff0c;存储取模为1~9的数从低位到高位进行数据收发&#xff0c;完成排序适用于数据位不高的情况&#xff08…

HCIA-Datacom实验指导手册:4.1 实验一:访问控制列表配置实验,fragment分片acl演示。

HCIA-Datacom实验指导手册:4.1 实验一:访问控制列表配置实验 一、实验介绍:二、实验拓扑:三、实验目的:四、配置步骤:步骤 1 掌握ACL的配置方法 配置方法步骤 2 掌握 ACL在接口下应用方法步骤 3 掌握 流量过滤 的基本方式步骤 4 掌握 禁止分片报文通过的方法验证五、结果…

LeetCode——415. 字符串相加

C开头 &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#…

除了Adobe之外,还有什么方法可以将Excel转为PDF?

前言 Java是一种广泛使用的编程语言&#xff0c;它在企业级应用开发中发挥着重要作用。而在实际的开发过程中&#xff0c;我们常常需要处理各种数据格式转换的需求。今天小编为大家介绍下如何使用葡萄城公司的的Java API 组件GrapeCity Documents for Excel&#xff08;以下简…

《HTML 简易速速上手小册》第7章:HTML 多媒体与嵌入内容(2024 最新版)

文章目录 7.1 在HTML中嵌入视频和音频7.1.1 基础知识7.1.2 案例 1&#xff1a;嵌入视频文件7.1.3 案例 2&#xff1a;嵌入音频文件7.1.4 案例 3&#xff1a;创建一个视频和音频混合的播放列表 7.2 使用 <iframe> 嵌入外部内容7.2.1 基础知识7.2.2 案例 1&#xff1a;嵌入…

盒子模型的内容总结

知识引入 1.认识盒子模型 在浏览网站时我们会发现内容都是按照区域划分的。这使得网页很工整、美观。在页面中&#xff0c;每一块区域分别承载不同的内容&#xff0c;使得网页的内容虽然零散&#xff0c;但是在版式排列上依然清晰有条理。如图1 图1 *承载内容的区域称为盒子…

RabbitMQ常见生产问题详解

目录 RabbitMQ如何保证消息不丢失&#xff1f; 哪些环节会有丢消息的可能&#xff1f; RabbitMQ消息零丢失方案 1. 生产者保证消息正确发送到RibbitMQ 2. RabbitMQ消息存盘不丢消息 3. RabbitMQ 主从消息同步时不丢消息 4. RabbitMQ消费者不丢失消息 如何保证消息幂等&…

kubernetes-快速部署一套k8s集群

1、前置知识点 1.1 生产环境可部署Kubernetes集群的两种方式 目前生产部署Kubernetes集群主要有两种方式&#xff1a; kubeadm Kubeadm是一个K8s部署工具&#xff0c;提供kubeadm init和kubeadm join&#xff0c;用于快速部署Kubernetes集群。 二进制包 从github下载发行…

高端车规MCU的破局之路

目录 1 低质量的无效内卷 2 高端车规MCU产品共性 2.1 支持标定测量 2.2 低延迟通信加速 2.3 完备的网络安全解决方案 2.4虚拟化 3 国产替代的囚徒困境 1 低质量的无效内卷 近几年&#xff0c;车规MCU国产替代的呼声此消彼长&#xff0c;但仍然集中在低端产品。 从产…

静态分析Golang语言生成函数调用关系的利器——go-callvis

目录 升级go删除旧版本安装新版本配置环境变量载入环境修改当前环境修改之后进入的环境 分析安装go-callvis分析其他包总结 导出文件总结 清晰主体脉络总结 其他 参考资料 不同于之前分析C语言项目的工具&#xff0c;go-callvis还是很方便使用。只要把两项工作做好就能顺利的使…