(一)基础的定位方法
1.通过元素的属性,如
id ,find_element_by_id(
"kw"
)
name ,find_element_by_name("wd")
class_name - 只支持一个class值 ,find_element_by_class_name("s_ipt")
tag_name ,find_element_by_tag_name("input")
只针对a元素:
link_text, find_element_by_link_text("地图")
partial_link_text ,find_elements_by_partial_link_text("hao")
(二)多个属性组合来找元素或者通过其它的关系来找元素
1.xpath定位,简单方法,浏览器F12中,右键copy--copy xpath。但是copy下来的定位,可能每次的表达式不一样
建议用相对定位,以//开头
(1)//标签名称[@属性=值],如://i[@class="ing"],//*[@*="ing"]
(2)如果找出来两个一样的元素,在通过上级来锁定二层//,表示一级一级的去找。具体用法://一级元素//二级元素
注意:/表示查找的是父子关系,一般用//表示没有限制只是父子关系
(3)文本匹配://*[text()=值] ,//*[text()="百度首页"]
(4)包含//标签名[contains(@属性,"值")] 或者//标签名[contains(text(),"值")]
(5)逻辑运算匹配 //标签名[@属性值=值 and/or @属性值=值]
(6)轴定位轴定位,通过关系来定位,注意要用/,因为需要限制下只是父子关系
已知元素/轴名称::标签名称[@属性=值]
已知元素/轴名称::*没有限制某个标签
已知元素定位,可以用前面的定位方式
轴名称:
ancestor:祖先结点 包括父
parent:父结点 给g
preceding: 当前元素节点标签之前的所有结点。(html页面先后顺序)
preceding-sibling: 当前元素节点标签之前的所有兄弟结点
following: 当前元素节点标签之后的所有结点。(html页面先后顺序)
following-sibling:当前元素节点标签之后的所有兄弟结点
例子://p[@title="值"]/preceding-sibling::p[@class="stuno"]
find_element_by_xpath('表达式')
element = driver.find_element(By.XPATH,'表达式'),默认取第一个
find_elements()
2.css_selector css选择器定位
find_element_by_css_selector('input#kw.s_ipt')
ps:如果有些元素需要点击才会出现就不好定位,可以采用点击后,在右键审查/检查元素