目录
一、HTML标签
每一个页面在用户访问的时候,都是呈现的HTML页面,想要获取页面中的任何元素,都需要先读懂html的基本内容
-
每一个HTML页面,都会是基于html标签开始的。是以树状菜单的结构形态来展示。
-
页面的所有我们需要关注的内容,都在body标签下。
-
所有的元素其实都是标签,每一个标签的组成,基本三要素:标签名称(TagName)、属性(Attribute)、文本(Text)
-
常见的标签名称:a/div/span/i/tr/td/input/p/form.....
-
在页面中不能够通过样子来判断标签类型,必须要通过开发者工具看标签名称来判定标签的类型。
详细了解HTML知识请点下方的链接学习:
二、八大元素定位法则
针对不同的元素,要进行操作之前,必须要先进行元素的定位。
在定位元素的方法选择上没有固定,什么方便用什么。
八大元素定位法则:
1. id:通过元素的id属性来进行元素的获取,一般id是不会重复的。类似于人的身份证号码
2. name:通过元素的name属性来进行元素的获取,一般有可能会重名。类似于人的姓名
3. tagname:通过元素的标签名称来进行元素的获取,一定会重名,一般在自动化中几乎不用,在爬虫领域用的比较多。
4. classname:通过元素的class属性来进行元素的获取,不特别推荐用此方法定位,因为class值可能会特别长,所以在读代码时不会特别友好
5. link text:通过元素的文本来进行定位,只能用于a标签的元素进行定位
6. partial link text:与link text一样通过文本来定位,只是说通过模糊查找的方式来实现元素的定位,类似于sql中like %s%,同样也只能用于a标签
7. css selector:定位界的万金油,定位核心是基于class属性来进行定位的
8. xpath:定位界万金油too,定位核心是基于树状结构来进行定位
元素定位方法:
driver.find_element(by,value)
元素的css selector和xpath都是可以通过copy来获取。这是最基本的应用手段。
如果在元素定位的过程中,遇到有重复属性,导致定位无法精准,Selenium定义下,如果有多个元素相同,则默认返回第一个
copy定位的方式是打开开发者工具,右键想要复制的元素位置,如下图所示:
1. id定位
# id元素定位
driver.find_element("id", 'header')
2. name定位
# name元素定位
driver.find_element('name', 'q')
3. tagname定位
tagname获取元素
driver.find_element('tag name', 'input')
4. classname定位
classname定位元素
driver.find_element('class nanme', 'fl js_topSearch seachBtn')
5. link text定位
# link text定位元素
driver.find_element('link text', '特殊场合')
6.partial link text定位
# partial link text定位元素
driver.find_element('partial link text', '婚')
7. css selector
# css selector定位元素
driver.find_element('css selector','#owl-fecshop > div.owl-wrapper-outer > div > div:nth-child(2) > div > a > img')
8. xpath定位
# xpath定位元素
driver.find_element('xpath', '//*[@id="owl-fecshop"]/div[1]/div/div[2]/div/a/img')
三、XPATH元素定位详解
1.xpath基础
xpath定位方法:根据树状结构来进行元素的获取,类似于操作系统的文件系统,因为需要从html标签开始查找,所以整个元素定位的速度相对css selector会更慢一些。
在元素定位和自动化执行的过程中,我们最优先关注的是稳定性,再才是效率
相对路径和绝对路径的概念:
绝对路径:/html/body/div[1]/div/div[1]/div/div/div/div/div[1]/div 阅读太差,维护太差,所以基本不会使用绝对路径来定位元素,除非实在搞不定
相对路径:
//*[@alt]
//*[@rel="nofollow" and @class="mycoount"]
//*[@id="owl-fecshop"]
//*[text()="我的账户"]
// 从根路径下开始查找
* 任意元素
[] 添加筛选条件
@ 表示基于属性来查找
id 表示属性名称
="owl-fecshop" 表示属性的值
and 表示多条件筛选
text() 表示文本信息
2.xpath的进阶
1. 元素定位,在开发者工具中,直接通过ctrl+F的搜索框进行元素的确认即可
2. 是可以相对路径+绝对路径来进行定位的:
查找子级:
//li[@class="store_lang"]/a
查找父级:
//li[@class="store_lang"]/..
3. xpath支持函数的应用,主要使用的函数是contains()
//a[contains(text(),"中")]
//a[contains(@id,"中") and @rel and @class]
4. 一定用手写xpath,不要用复制的xpath
1. 提升可读性与维护性
//li[@class="store_lang"]/..
2. 随着你经验增加,手写会更加有效率
3. 提升元素定位的准确性
1. 前端界面的质量决定
2. 解决动态元素的定位:动态元素,即属性会动态改变的元素
5. 伪元素:正常定位即可