元素定位
一、find_element与find_elements的区别
1、find_element()只会查找页面符合条件的第一个节点,并返回;但是定位不到元素则会报错。
如:find_element(”元素“)
2、find_elements()查找多个元素并且返回一个列表,列表里的元素全是WebElement节点对象;当定位不到元素时不会报错,会返回一个空列表。
find_elements(“元素”)[x]
二、Css元素定位
1、单一属性定位
1、type selector
#使用标签名称input定位
driver.find_element_by_css_selector('input')
2、id 定位
#使用关键字 ”#” 定位id属性
driver.find_element_by_css_selector('#kw')
3、class 定位
#使用关键字“ . ”定位class属性
driver.find_element_by_css_selector('.s_ipt')
4、其他属性定位
driver.find_element_by_css_selector("[name='wd']")
driver.find_element_by_css_selector("[type='text']")
2、组合属性定位
1、id组合属性定位
使用标签名+id属性值进行定位
driver.find_element_by_css_selector("input#kw")
2、class组合属性定位
使用标签名+class属性值进行定位
driver.find_element_by_css_selector("input.s_ipt")
3、其他属性组合定位
使用标签+name属性值称定位,关键字为 "[]"
driver.find_element_by_css_selector("input[name='wd']")
4、仅有属性名,没有值也可以
使用标签+name属性称定位,关键字为 “[]”
driver.find_element_by_css_selector("input[name]")
5、两个其他属性组合定位
driver.find_element_by_css_selector("[name='wd'][autocomplete='off']")
6、模糊匹配属性值方法
以百度首页点击按钮为例
1>属性值由多个空格隔开,匹配其中一个值的方法
driver.find_element_by_css_selector("input[class~='btn']")
2>匹配属性值为字符串开头的方法
driver.find_element_by_css_selector("input[class^='btn']")
3>匹配属性值字符串结尾的方法
driver.find_element_by_css_selector("input[class$='s_btn']")
4>匹配被-分割的属性值的方法,如上图的class
driver.find_element_by_css_selector("input[class|='s']") #要求精确填写的属性值
3、层级定位
1、E>F E下面的F这个元素
driver.find_element_by_css_selector('from#form>span>input')#id是form的form下面的span下面的input
2、E:nth-child(n) 如上图,
driver.find_element_by_css_selector(’#u_sp > a:nth-child(1)’)#id为u_sp的下面的第一个a标签。
#实测,这个定位不到,但是方法是对的,- -
3:E:nth-last-child(n),如字面意思:倒数第几个标签
4:E:first-child,第一个标签
5:E:last-child,最后一个标签
6:E:only-child,唯一的标签
4、层级元素定位
使用 “ > ” 符号表示展开层级关系,如 .aa>.bb ,表示bb是aa的子集
6、层级加下标定位,
如 (.aa>.bb)[x],通过下标选中第几个值
三、Xpath元素定位
1、绝对路径定位
直接复制粘贴
2、层级加下标定位,
如://*[@id="page-content"][2]