pythonxpath定位_python+selenium基础之XPATH定位(第一篇)

世界上最远的距离大概就是明明看到一个页面元素站在那里,但是我却定位不到!!

selenium定位元素的方法有很多种,像是通过id、name、class_name、tag_name、link_text等等,但是这些方法局限性太大,拿id属性来说,首先一定不会每个元素都有id属性,其次元素的id属性也不一定是固定不变的。所以这些方法了解一下即可,我们真正需要熟练掌握的是通过xpath和css定位,一般只要掌握一种就可以应对大部分定位工作了。

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

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

8485634ef96a6bc52797b2d4fca50dd5.png

fee2cc635537eb60449fbbba2e485629.png

47f8d7455e0c86ba20d698cc24ed787d.png

5797e5401239cf31cac944709aff54f2.png

二、常用的xpath定位方法

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

(1)通过id属性

c1fbae6128bea44f62df7b8144753f4c.png

xpath = "//a[@id='start_handle']"

//a 表示选取所有a元素,加上[@id='start_handle']表示选取id属性为'start_handle'的a元素

(2)通过name属性定位

bf05ff7f216a657a0371878c05774f8a.png

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

概括:

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

属性判断条件:最常见为id,name,class等等,属性的类别没有特殊限制,只要能够唯一标识一个元素即可。

当某个属性不足以唯一区别某一个元素时,也可以采取多个条件组合的方式,如下:

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

2.利用text()方法定位

7516ce8cff632d59ad23d34c1f83eb49.png

如上所示,在【上一步】按钮的标签之间有一段文本“上一步”,那么可以通过下面这种方式来定位

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

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

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

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

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

202c3e9906cf077b2dad893d82593cf7.png

取href的关键信息'basicinfo',这样也可以定位到【开始办理】按钮

xpath = "//a[contains(@href, 'basicinfo')]"

4.如果一个元素无法通过自身属性直接定位到,则可以先定位它的父(或父的父,它爷爷)元素,然后再找下一级即可例如定位百度搜索框,可以按照此种方式试验一下(主要是看一下这个思路)

435909ee94af2892a73ee40d2d0ea3df.png

百度搜索框对应标签,定位标签的话,可以先定位

标签,再定位标签的子元素 标签,最后找到标签

driver.find_element_by_xpath("//form[@id='form']/span[contains(@class,'s_ipt_wr')]/input").send_keys('python')

注意:在第二步定位元素时,没有用的id属性,因为在实际中发现通过webdriver打开的浏览器网页中标签没有id属性了(所以选用标签的class属性,并且通过contains()模糊定位),如下:

c4bcf16a3affd2ecda0eca6a437c5563.png

定位百度一下按钮

af289d1226d3a1f3edcde5976e4e64f0.png

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值