以谷歌为例,我们打开顾客控制台,快捷键为F12,如下
web页面有如下几种定位元素
1)根据id
2)根据name
3)根据class值
4)根据tag
5)根据文本定位
6)xpath定位
7)css定位
1)通过id来定位,一般来说一个页面只有一个id作为唯一标识。
driver.find_element_by_id("kw")
2)通过name定位,定位出来的可能是有多个可能是一个。
driver.find_elements_by_name("wd")
driver.find_element_by_name("wd")
3)通过class定位,同样他也可能不是唯一的,可能有多个。
driver.find_elements_by_class_name("s_ipt")
4)通过标签来定位tag,标签名不是绝对唯一的(一个页面内可能存在多个相同的标签名)
driver.find_elements_by_tag_name("input")
5)通过文本的精确查询和模糊查询来定义,不是绝对唯一的(一个页面内可能存在多个链接元素的文本内容是相同的)
driver.find_elements_by_link_text("新闻")
driver.find_elements_by_partial_link_text("hao123")
6)xpath定位,绝对路径和相对路径
1、绝对路径定位方法如下图:
绝对定位 以/单斜杠开头,从根结点开始,严格按照顺序和位置来表达 父/子find_element_by_xpath("/html/body/div/div/div/div/div/span/input")——以/开头,从根目录逐级查找(父子关系),这种方式太依赖元素的位置和顺序,稍微调整就会找不到,后期维护成本太高,所以一般不会用绝对定位
2、相对定位以//开头,在整个页面中寻找符合定位表达式的元素,不在乎元素的顺序和位置以//开头,不管元素的位置和顺序 。 在html页面当中,有没有匹配表达式的元素
单属性定位: //标签名[@属性名称=值]
//input[@id='kw']
//input[@name='wd']
//input[@class='s_ipt']
后面还可以加索引值
如果单属性定位不到,就需要组合属性定位://标签名[@属性名称=值 and @属性名称=值 and @属性名称=值]
//input[@id='kw' and name='wd' and class='s_ipt' ]
如果存在两个一样的元素,则需要找父类的元素定位
//div[@id='url']//[@name='tj_login']
7、css_selector
#标签名#id值
driver.find_element_by_css_selector("kw")