selenium的基本定位方式总结
Selenium提供了8种定位方式。
-
id
-
name
-
class name
-
tag name
-
link text
-
partial link text
-
xpath
-
css selector
这8种定位方式在Python selenium中所对应的方法为:
-
find_element_by_id()
-
find_element_by_name()
-
find_element_by_class_name()
-
find_element_by_tag_name()
-
find_element_by_link_text()
-
find_element_by_partial_link_text()
-
find_element_by_xpath()
-
find_element_by_css_selector()
百度页面查看元素属性,页面如下
通过id定位
find_element_by_id(“kw”)
find_element_by_id(“su”)
通过name定位:
find_element_by_id(“wd”)
通过class name 定位
find_element_by_class_name(“s_ipt”)
通过tag name定位
find_element_by_tag_name(“input”)
可见仅仅通过标签名去定位时,一般一种标签在一个页面里面会出现不止一次甚至大量出现,这种定位方式的作用不是很大,所以用的也就比较少
通过xpath定位
绝对路径定位
find_element_by_xpath(“/html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input”)
find_element_by_xpath(“//input[@id=\’kw\’]”)
find_element_by_xpath(“//*[@name=\’wd\’]”)
其中的标签名input也可以用*来代替,而且只要是在该标签内,任意属性都可以,比如搜索框的maxlength属性:
find_element_by_xpath(“//input[@maxlength=\’255\’]”)
查找搜索框的时候发现其上级元素form又唯一的id方便定位,就可以先查找到form元素然后依次往下写路径
find_element_by_xpath(“//form[@id=\’form\’]/span/input”)
如果元素的单个属性无法确定其唯一性,可以用and连接多个属性去确定
find_element_by_xpath(“//input[@id=\’kw\’ and @name=\’wd\’]”)
通过css定位
一般class是用.标记,id是用#标记,标签名直接写具体标签名就好
find_element_by_css_selector(“#su”)
find_element_by_css_selector(“.s_ipt”)
find_element_by_css_selector(“[name=wd]”)
css定位里面也可以通过属性或者组合方式定位:
find_element_by_css_selector(“input[autocomplete=\’off\’]”)
find_element_by_css_selector(“span.bg.s_btn_wr>input#su”)
具体说一下百度一下那个按钮的组合定位方式,这样写的定位顺序是这样的,先定位到一个class名为bg s_btn_wr的span标签,在这个标签下面有一个id为su的input标签,这样就定位到了
值得注意的是,在css里面下级标签元素用>连接,如果class里面有空格,空格用.进行连接。
find_element_by_link_text()
find_element_by_partial_link_text()
这两种定位方式是专门用于定位超链接的,也就是对应html页面中的<a>标签,括号里传的值就是a标签中的超链接文字,两者的区别在于一个是完整的超链接文字,一个是可以只写部分超链接文字。
比如点击百度首页中右上角的新闻超链接,可以这样去定位:
driver.find_element_by_link_text(“新闻”).click()
driver.find_element_by_partial_link_text(“闻”).click()
elements复数定位
在上面的例举的八中基本定位方式种,都有对应的复数形式,分别是下面:
id复数定位find_elements_by_id()
name复数定位find_elements_by_name()
这些复数定位方式每次取到的都是具有相同类型属性的一组元素,所以返回的是一个list队列,我们也可以利用这个去定位单个的元素。比如百度首页种,右上角有新闻、视频、地图、贴吧等一些链接,我们通过f12查看源码可以发现,这些链接都有共同的class, class=”mnav”。
举个例子,比如定位排在第六个的学术,可以这样定位:driver.find_elements_by_class_name(“mnav”)[5].click()
版权声明:本文为tuxiaomeng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。