赞
踩
元素定位8中方式Id
,Name
,Link text
,Partial Link Text
,Tag Name
,Class Name
,Xpath
,Css Selector
id相当于身份证,一般不会重复:
driver.find_element('id', 'su')
通过属性name定位:
driver.find_element('name', 'ch')
针对于a标签实现的定位
driver.find_element('link text', '新闻').click()
针对a标签的text内容进行模糊查找:
driver.find_element('partial link text', '新')
通过标签名称进行定位,一般用不到
driver.find_elements('tag name', 'input')
基于元素的class属性定位:
driver.find_element('class name', 'bg s_ipt_wr new-pmd quickdelete-wrap ipthover')
原理就是基于css样式来对元素进行定位,属于8大定位中最快的定位方法:
这里对于id选择器、class选择器、标签选择器不在进行陈述。
使用标签中的id定位,用#
号加id值 #s_kw_wrap
driver.find_element('css selector', '#s_kw_wrap')
直接通过标签名定位,日常中没啥意义
driver.find_element('css selector', 'input')
使用class属性值进行定位,使用符号.class的值
,如果class的值中有空格需要使用.
对所有的空格进行替换
driver.find_element('css selector', '.toindex')
属性选择器即 [属性名=‘属性值’]
,与xpath中的属性定位 [@属性名=‘属性值’]
注意区分
driver.find_element('css selector', '[id="s_kw_wrap"]')
可以同时使用多个属性选择器 [属性名=‘属性值’][属性名=‘属性值’]
driver.find_element('css selector', '[type="text"][name="wd"]')
三种选择器同时使用时中间不用空格,且标签选择器必须在最前面
driver.find_element('css selector', 'input#su.btn.self-btn.bg.s_btn')
在当前节点后 使用空格加上后代标签,只要是直系后代元素都能定位到。
driver.find_element('css selector', '[id="form"] i')
使用>
定位,只能定位到子元素只要是儿子都能定位到,中间不能隔代,也无法定位到孙子。
driver.find_element('css selector', '[id="form"]>span')
使用+
定位,只能定位到同级元素(具有同一个父元素)
driver.find_element('css selector', '[id="s_top_wrap"]+div')
使用 ~
定位,可以定位到所有的兄弟元素,不管是不是紧挨的都能找到
driver.find_element('css selector', '[id="s_top_wrap"]~div')
伪类一般用于标签数量会发生变化的时候;比如有一个下拉框,但是因为需求还没有完全确定,下拉框中选项的数量可能会因为需求的变动而发生变化(数量会发生变化)。
如图,id=‘head’的div标签下面定位到了很多div标签,假设这里的div标签数量不定,会动态的变化,此时就可以使用伪类进行定位:
表示取父标签下的第n(n从1开始)个元素
driver.find_element('css selector', '[id="head"]>div:nth-child(2)')
表示取父标签下倒数第n个元素
driver.find_element('css selector', '[id="head"]>div:nth-last-child(2)')
表示取父标签下第1个元素
driver.find_element('css selector', '[id="head"]>div:first-child')
表示取父标签下最后一个元素
driver.find_element('css selector', '[id="head"]>div:last-child')
基于html结构来对元素进行定位
示例://*[@id=“kw”] 表示从根路径下开始查找任意一个元素,该元素具备有id属性,且属性值为kw
driver.find_element('xpath', '//*[@value="百度一下"]')
部分属性调用contains()
函数,进行模糊查找 contains(@属性名,’属性值’)
driver.find_element('xpath', '//*[contains(@value,"一下")]')
使用and可以连接同时指定多个属性
driver.find_element('xpath', '//*[@type="submit" and @value="百度一下" and @id="su"]')
text()用于定位标签的文本 text()=‘文字’
driver.find_element('xpath', '//*[text()="以人民为中心推动文化建设"]')
部分属性调用contains()
函数,进行模糊查找 contains(text(),'部分文字')
driver.find_element('xpath', '//*[contains(text(),"以人民")]')
轴定位表示与当前节点上下文节点的关系,语法:轴名称::标签名[索引值]
,[索引值]可不加,如果需要使用索引则需要根据轴名称的作用对应的向前取值或向后取值。索引值从1开始算。
表示选取当前节点的父节点。作用等同于 … *可以指定标签名
driver.find_element('xpath', '//*[@name="tj_briicon"]/parent::*')
# 与..作用相同
driver.find_element('xpath', '//*[@name="tj_briicon"]/..')
表示选取当前元素的子节点。作用等同于 /
driver.find_element('xpath', '//*[@id="form"]/child::input[1]')
表示选取当前节点的所有的直系先辈(父节点,祖父节点) 一般不常用
driver.find_element('xpath', '//*[@id="form"]/ancestor::div[1]')
表示选取当前节点的所有的直系后辈(子节点,孙子节点) 一般不常用
driver.find_element('xpath', '//*[@id="form"]/ancestor::div[1]')
表示选取当前节点的开始标签之前的所有节点,即要定位的结束标签一定要在当前节点开始标签之前。所以对于直系先辈的元素是无法定位的,因为直系先辈的结束标签必定在当前节点之后了。
driver.find_element('xpath', '//*[@id="form"]/preceding::a[1]')
表示选取当前节点的开始标签之前的所有的同级节点
driver.find_element('xpath','//*[@id="form"]/preceding-sibling::*')
表示选取当前节点的结束标签之后的所有节点。(只要在当前节点的结束标签之后都能定位到,不常用)
driver.find_element('xpath','//*[@id="s_kw_wrap"]/following::*')
表示选取当前节点的结束标签之后的所有同级节点。(只能定位到同级节点,相当于兄弟)
driver.find_element('xpath','//*[@id="s_kw_wrap"]/following-sibling::*')
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。