基本定位:id 、name、link text、partial link text、class name、tag name
高级定位方法:xpath、css selector
-- id定位:使用元素的id属性值来定位,最建议使用
driver.find_element(By.ID,'id属性值')
--name定位:使用元素的name属性值来定位
driver.find_element(By.NAME,name属性值')
--link text定位:用连接的全部文本定位超级链接类型的元素,说明:超级链接就是指HTML中标记名称是a的元素,此种定位方法只能定位有文本的超级链接(<a>和</a>之间必须有文本字符串),不能定位其它类型的元素
driver.find_element(By.LINK_TEXT,”链接文本”)
--partial_link属性定位:driver.find_element(By.PARTIAL_LINK_TEXT,"value")
--xpath定位
xpath是在(xml路径语言)是在xml文档中使用路径表达查找节点或节点集合的一种技术,因为html可以被看成一个特殊的xml文档,所以我们可以使用xpath这种技术在网页里面查找页面元素,谷歌也可以自动生成xpath表达式
driver.find_element(By.XPATH,"xpath表达式")
绝对路径xpath:从根节点开始描述路径,不建议使用
相对路径xpath:从中间某层节点开始描述路径,以维护和管理
①相对路径+索引定位
//标签名/标签名[有同名标签时,所需标签的序号]/标签名
例://form/span[1]/input
②相对路径+属性定位
搜索标签名下属性为属性名1='属性值1'的标签://标签名[@属性名1='属性值1']
例://input[@autocomplete='off']
③相对路径+通配符定位
搜索整个网页找到标签里有属性名1='属性值1'的标签://标签名*[@属性名1='属性值1']
例://input[@autocomplete='off']
搜索整个网页找到标签里有属性值为'属性值1'的标签://标签名*[@*='属性值1']
例://input[@*='off']
④相对路径+部分属性值定位
搜素属性值以x开头的标签://*[starts-with(@属性名,'x')]
例://*[starts-with(@autocomplete,'of')]
搜素属性值以x结尾的标签://*[substring(@属性名.a,'x')]
例://*[substring(@autocomplete,'ff')]
搜素属性值包含x的标签://*[contains(@属性名,'x')]
例://*[contains(@autocomplete,'ff')]
⑤相对路径+文本定位
//标签名[text()='x')] 或 //*[text()="xxx"]
例://span[text()='按图片搜索')]
书写相对路径xpath:一般以 // 或 ./ 开头
--//后直接写目标节点的标记名称
--如果直接找到目标节点,不唯一,可以从父节点开始写书写,如果加了父节点还是不唯一,那么可以继续加爷爷节点或更向前的节点,每层父子关系的节点之间都使用/分隔开
--在各层节点的标记名称后,都可以加筛选条件,xpath里把这样筛选条件成为“谓词”,使用[]来表示,其功能等价于SQL语句里的where子句
--在各层节点的标记名称后,都可以加筛选条件,xpath里把这样筛选条件成为“谓词”,使用[]来表示,其功能等价于SQL语句里的where子句
*写在/ 或 // 后,代表任意的标记名称
--text函数:无参,获得某元素的开始和结束标记之间的文本,返回值是一个字符串
driver.find_element(By.XPATH,"//*[test()='高级搜索'")
--css定位
css是层叠式样式表,在 该技术中有一种Selecyor(选择器)技术,其中包含一些css表达式可以用于定位元素,其功能与xpath功能有重叠
driver.find_element(By.CSS_SELECTOR,”css表达式”)
(1)id选择器
使用#号表示id属性,如:driver.find_element(By.CSS_SELECTOR, '#user')
(2)class选择器
使用.表示class属性,如:driver.find_element(By.CSS_SELECTOR, '.tel')
(3)通过标签名定位
格式:element,如:driver.find_element(By.CSS_SELECTOR, 'input')
(4)通过属性或部分属性定位
格式:[”attribute=value”]
driver.find_element(By.CSS_SELECTOR,"[autocomplete='off']")//查找属性autocomplete='off'的元素
driver.find_element(By.CSS_SELECTOR,"[autocomplete='off'][name='user']")//查找属性autocomplete='off'且name='user'的元素
//通过部分属性值定位
driver.find_elemen(By.CSS_SELECTOR,"[autocomplete^='o']")//查找autocomplete属性值从o开始的元素
driver.find_elemen(By.CSS_SELECTOR,"[autocomplete*='f']")//查找autocomplete属性值含有f的元素
driver.find_elemen(By.CSS_SELECTOR,"[autocomplete$='f']")//查找autocomplete属性值以f结尾的元素
(5)层级选择器
根据元素的父子关系来选择,层级定位一般很难唯一定位到元素,所以一般情况下层级跟id/class/属性或者部分属性值一起组合定位。
格式:element>element,> 可以用空格代替
driver.find_element(By.CSS_SELECTOR,"form>span>input")
driver.find_element(By.CSS_SELECTOR,"form span input")
driver.find_element(By.CSS_SELECTOR,"form>span>input>[type='password']")
driver.find_element(By.CSS_SELECTOR,"form span input [type='password']")
(6)通过兄弟节点定位(通过元素的并列索引定位)
说明:兄弟节点就是同一父级元素下,存在多个相同子标签,那么这些子元素就是兄弟节点
通过索引a:nth-child(1)来定位子元素
//选择第1个<a>里元素
driver.find_element(By.CSS_SELECTOR,"div#s-top-left>a:nth-child(1)")
//选择第2个<a>里元素
driver.find_element(By.CSS_SELECTOR,"div#s-top-left>a:nth-child(2)")
//选择第n个<a>里元素
driver.find_element(By.CSS_SELECTOR,"div#s-top-left>a:nth-child(n)")
--tag_name属性定位:
driver.find_element(By.TAG_NAME,"input")
注:新版本的Python selenium 格式与老版本不一致
by
老版本:by
新版本:By
定位方法
老版本:小写
新版本:全部大写
对css 的补充
css selector
1. 通过多个属性来定位
driver.find_element_by_css_selector(".ant-btn.ant-btn-primary"
多个属性用“.”连接表示属性,用于定位
注:每个属性前需要加“."
2. copy css selector 方法
各种符号的意义,能够改写复制出来的 css selector
(1)#表示id属性
(2)小数点表示class属性
(3) []表示所有属性
[id="1"]
[class="a"]
(4)标签名前没有任何符号
a
input[value="1"]
(5) >表示父子元素之间的关系
div>input
表示我们要找到的input元素有一个父节点
(6)空格表示祖先和子孙之间的关系
div#id input.class
1)表示页面中有一个id="id"的dev元素
2) 在该dev元素的子孙节点中有个input标签
3)该input标签有个class="class"的属性
4)需要定位的就是这个input标签
<html>
<bady>
<div id="id">
<...>
<input class="class">
Select
1.转换成下拉框类型select(Select仅适用于<Select>元素,不适用于<div>)
注:需要先定位到下来框,并实例化,
如:
s1 = Select(driver.find_element_by_id('s1Id'))
s1.select_by_visible_text("好的")
s1.select_by_value(选项的value属性的值)
s1.select_by_index(第几个选项)
2.相同定位参数存在多个
用find_elements_by_定位参数()[第几个]
注:多个要用elements
driver.find_elements_by_class_name("ant-btn")[1].click()
select模块中关于option选项的方法:
options:返回所有的option选项
all_selected_options:返回所有选中的option选项
first_selected_option:返回第一个选中的option选项
is_multiple:查看是否多选