selenium元素定位之XPath

XPath是XML文档中定位元素的一种语言,HTML可以看成一种XML文档。XPath定位也是所有定位元素的方法中用的最多的,这块必须要掌握。

1.绝对路径定位

可以通过浏览器开发者模式找到要定位的元素,如下图操作。

selenium元素定位之XPath

语法:find_element_by_xpath("/html/boay/div[1]/div[3]/input")

2.利用元素属性进行定位

除使用绝对路径进行定位外,还可以使用元素属性进行定位。

如定位发布博客按钮,前端代码如下图

selenium元素定位之XPath

语法:find_elememt_by_xpath("//input[@id='btnPublish']"),//表示当前页面的某个目录下,input表示定位元素的标签名,[@id='btnPublish']表示这个元素的id是btnPublish。

同样也可以写为:find_elememt_by_xpath("//input[@class='btn btn-outline-danger']"),如果不想指定标签名,可以用*代替。find_elememt_by_xpath("//*[@class='btn btn-outline-danger']")

xpath不局限与id、name、class属性,凡是可以唯一标识元素的都可以使用。上面的发布博客按钮定位也可以写为:find_elememt_by_xpath("//input[@value='发布博客']")

3.层级与属性结合

如果一个元素没有唯一可以标识这个元素的属性值,我们可以通过定位他的父元素,从而定位到改元素。如百度的前端代码。

selenium元素定位之XPath

我们要想定位百度的搜索按钮,我们可以这样定位:find_element_by_xpath("//span[@id='s_btn_wr']/input")

当然也可以直接定位到他爷爷的那层级,这时候可以这样写:find_element_by_xpath("//form[@id='form']/span/input")

4.使用逻辑运算符

如果有一段这样的前段代码:

.....

<input id='kw' class='dd' name='ss'>

<input id='kw' class='aa' name='ss'>

<input id='se' class='aa' name='ss'>

......

我们要定位第二个元素,此时我们可以通过and逻辑运算符定位该元素,语法:find_element_by_xpath(//input[@id='kw' and @class='aa']")