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(),"新")]')
本文来自博客园,作者:术科术,转载请注明原文链接:https://www.cnblogs.com/shukeshu/p/15172193.html