selenium-元素定位方法

HTML基础知识:

所有的元素定位归根结底都是在静态页面的操作下实现的。

HTML叫做标签语言。基于不同的标签来展示不同的内容。

常见的标签:

a:超链接

img:图片

input:输入框、文件上传、按钮。。。

iframe:窗体

span、div

HTML标签内容,在展示的时候,不要被肉眼欺骗,要依据于class属性来确认元素长啥样,而操作的根本在于标签的名称

标签包含有几个不同的特性需要了解:

1. 标签名称,所有的标签都一定会有标签名

标签名== 元素

2. 属性,单个标签可以有多个属性,只有在<>中的才叫做属性

<a attribute1=""></a>

<a attribute1=""/>

3. 文本,在<></>之间的内容,叫做文本

 

元素定位:

提供有八种不同的元素定位方法。在Selenium的实现中,准确来说是有十六种不同的定位方法。(八种单数,八种复数)

自动化中通过元素定位获取的对象都是WebElement对象。

八种元素定位:

1 id:基于标签的id属性定位;

2 name:类似于身份证上的名字,容易重名;

3 link test:用于定位超链接,通过a标签的文本定位;

4 partial link test:用于定位a标签,通过模糊匹配的方式定位,一般使用partial会出现多元素的结果,建议使用find_elements定位;

5 tagname:基于标签名进行定位,一般而言不推荐,只有在特殊的情况下需要用到;

6 classname:机器不推荐使用的定位方法,除非实在是没有别的方法了;

7 cssselector:定位界的万金油,专为IE浏览器定位准备;

8 XPath:定位界的万金油;

最为主流的定位方法是xpath,最灵活的定位方法是cssselector和xpath两种

 

样例记录:

 1 '''
 2     八种元素定位法则(开发者工具中,elements标签页下,通过ctrl+F显示元素查找框):
 3         1. id:基于标签的id属性来进行定位,类似于身份证号码,基本不会重复,为了避免出现重复,最好是提前校验一下
 4         2. name:类似于身份证上的名字,容易重名
 5         3. link text:用于定位超链接(a标签),通过a标签的文本来进行定位
 6         4. partial link text:用于定位a标签,通过模糊查找的形式来实现定位,类似于mysql中的like关键字
 7             一般partial定位会出现多元素的结果,一般可以通过find elements来进行定位:
 8                 1. 不加s进行的定位,默认返回查找到的第一个元素
 9                 2. 加s进行定位,基于下标的选择来返回元素
10         5. tagname:基于标签名来进行定位,一般而言不推荐,只有在特殊情况下需要用到
11         6. classname:极其不推荐使用的元素定位方法,除非是实在没有办法了。
12         7. cssselector:是定位界的万金油之一,专治IE浏览器下的元素定位疑难杂症,可以通过右键copy的形式来定位
13         8. xpath:也是万金油,是基于树状结构来进行定位的,类似于文件机制
14             绝对路径:/html/body/div/div[2]/div[5]/div[1]/div/form/span[1]/input,绝对路径下的下标是从1开始的
15                 实在定位不到元素的时候,也不推荐使用。
16             相对路径:有相对路径的语法来实现便捷的定位手段。
17                 //input[@id="kw"] 从根路径下查找id为kw的input标签
18                 //*[@id="kw"]
19                 //*[text()="新闻"]
20                 基本语法规则:
21                     //  从根路径下开始查找,从html标签开始
22                     input  查找的元素标签名称,如果是*,表示查找全部的标签
23                     [] 添加筛选条件,可以单条件,也可以通过and进行多条件关联
24                     @ 表示属性(Attribute)
25                     text() 固定写法,专属于通过text文本来查找元素的筛选条件,text内容完全符合一致才可以。
26                 xpath中包含有非常多的元素定位方法,但是,基本上常用的就是一种,相对路径以及爸爸找儿子是最常用的
27                 在查找元素的时候,推荐是自上而下进行查找。
28             xpath常用函数:
29                 contains:通过模糊查找的行为,查找元素。可以通过属性或者文本作为查找条件
30                 //input[contains(@id,"kw")]
31                 //a[contains(text(),"新")]
32 
33     伪元素:(有些特定数据是在调用页面的时候才会进行接口通信生成的。)一般常见于下拉列表框
34         ::defore::
35         ::after::
36         遇到伪元素的时候,通过cssselector定位即可。
37 '''
38 from selenium import webdriver
39 from selenium.webdriver.common.by import By
40 
41 driver = webdriver.Chrome()
42 driver.get('http://www.baidu.com')
43 # 通过id来进行元素的定位
44 # el = driver.find_element_by_id('kw')
45 # print(type(el))
46 # 通过name来进行元素定位
47 # el = driver.find_element_by_name('wd')
48 # print(type(el))
49 # 通过link text进行元素定位
50 # el = driver.find_element_by_link_text('新闻')
51 # el.click()
52 # 通过partial link text进行元素定位
53 # el = driver.find_element_by_partial_link_text('百度')
54 # print(el.text)
55 # elements的定位默认返回一个list,将所有符合条件的元素全部放到一个list中,再将list返回
56 # els = driver.find_elements_by_partial_link_text('百度')
57 # for el in els:
58 #     print(el.text)
59 # 通过tagname进行定位:都是基于复数的s来定位
60 els = driver.find_elements_by_tag_name('a')
61 for el in els:
62     print(el.text)
63 # 通过classname定位:是通过标签的class属性定位,不推荐
64 # driver.find_element_by_class_name()
65 # 通过cssselector定位:
66 # driver.find_element_by_css_selector('#kw')
67 # 通过xpath定位:
68 # driver.find_element_by_xpath()  # 返回第一个
69 # driver.find_elements_by_xpath()  # 返回list
70 
71 # 筛选器类实现八种不同的元素定位
72 driver.find_element(By.XPATH, '//a[contains(text(),"新")]')
73 # By.XPATH == "xpath"
74 driver.find_element('xpath', '//a[contains(text(),"新")]')

 

posted @ 2021-08-22 14:35  术科术  阅读(263)  评论(0编辑  收藏  举报