python+selenium基础之XPATH定位

elenium定位元素的方法有不少种,像是经过id、name、class_name、tag_name、link_text等等,可是这些方法局限性太大,拿id属性来讲,首先必定不会每一个元素都有id属性,其次元素的id属性也不必定是固定不变的。因此这些方法了解一下便可,咱们真正须要熟练掌握的是经过xpath和css定位,通常只要掌握一种就能够应对大部分定位工做了。css

 

下面总结一下xpath的定位方法,结合本身练习的实例加深一下了解html

1、首先须要了解一下xpath的概念和基本语法

网上关于xpath的教程比较少,能够看一下菜鸟教程和w3cschool的相关资料:http://www.runoob.com/xpath/xpath-tutorial.htmlhttp://www.w3school.com.cn/xpath/index.asppython

 

2、经常使用的xpath定位方法

1.利用标签内的属性进行定位web

(1)经过id属性浏览器

xpath = "//a[@id='start_handle']"//a 表示选取全部a元素,加上[@id='start_handle']表示选取id属性为'start_handle'的a元素
(2)经过name属性定位

 

xpath = "//input[@name='custName']"

归纳ide

xpath = "//标签名[@属性='属性值']"

 

属性判断条件:最多见为id,name,class等等,属性的类别没有特殊限制,只要可以惟一标识一个元素便可。spa

当某个属性不足以惟一区别某一个元素时,也能够采起多个条件组合的方式,以下:3d

xpath= "//input[@type='XX' and @name='XX']"

 

2.利用text()方法定位orm

如上所示,在【上一步】按钮的<a></a>标签之间有一段文本“上一步”,那么能够经过下面这种方式来定位htm

xpath = "//a[text()='上一步']"

【开始办理】按钮可使用以下路径

xpath = "//a[text()='开始办理']"

 

3.利用contains()方法定位,也叫模糊定位

xpath = "//标签名[contains(@属性, '属性值')]"

 

取href的关键信息'basicinfo',这样也能够定位到【开始办理】按钮
xpath = "//a[contains(@href, 'basicinfo')]"

4.若是一个元素没法经过自身属性直接定位到,则能够先定位它的父(或父的父,它爷爷)元素,而后再找下一级便可

例如定位百度搜索框,能够按照此种方式试验一下(主要是看一下这个思路)
百度搜索框对应<input>标签,定位<input>标签的话,能够先定位<form>标签,再定位<form>标签的子元素<span>标签,最后找到<input>标签
driver.find_element_by_xpath("//form[@id='form']/span[contains(@class,'s_ipt_wr')]/input").send_keys('python')

注意:在第二步定位<span>元素时,没有用<span>的id属性,由于在实际中发现经过webdriver打开的浏览器网页中<span>标签没有id属性了(因此选用<span>标签的class属性,而且经过contains()模糊定位),以下:

定位百度一下按钮

driver.find_element_by_xpath().click()
或者 "//form[@id='form']//input[@id='su']"

 

总之,XPATH路径表达式须要多写多练,孰能生巧。还有当定位失败时不要慌,找下缘由,眼见不必定为实,像上面定位百度搜索框时,经过id属性没有定位到<span>标签,查看经过webdriver打开的网页元素时,发现<span>标签的id属性没了,只有class属性了,这个时候就须要换一个属性,如class属性(至于为啥会消失,我也不知道,但愿有高手不吝赐教)。

相关文章
相关标签/搜索