七.python+selenium元素定位之xpath

xpath定义方式有两种:

1.绝对路径       2.相对路径

绝对路径的意思是从最高级一级一级去找到该元素,为方便理解,举个例子:

框出来的从C盘一步步到selenium文件夹的所有路劲就属于绝对路径。

相对路径: 就是可以把“C:\Python27\Lib\site-packages\selenium-2.53.2-py2.7.egg“ 这前面部分用字符去代替 然后直接找到\selenium文件夹

对于HTML来说,参考百度首页新闻xpath的绝对路径:

首先看看这张截图,html的路径第一个都是以html开始,一般定位都是boby标签为第二个位置。

查看图中的倒三角形,先数数一共需要写几个标签,除了html和最下面的a href标签外我们一共有5个倒三角形,加上html和a href我们一共会写7个标签,也就是一共有7级的路径。

那么绝对路径的写法为: html/body/div[1]/div[1]/div/div[3]/a[1]

以上,可能会对div[1],这个1是怎么来的存在疑问。 我们在数标签的时候可以把倒三角形缩起来,查看同级标签的位置。

例如倒数第二个div[3],它在div下同级平行标签数下来是第3个,所以取div[3]

又例如最后一个是a[1],它在a同级平行标签下是排在第一位,所以取a[1]

新闻的xpath元素定位用相对路径的写法是:  .//*[@name="tj_trnews"] 

其中 .//表示某个层级下    *表示某个标签    [@属性名="属性值"]为固定格式

以下为代码演示:

#coding:utf-8
from selenium import webdriver #调用selenium中的webdriver包
from time import sleep #导入时间包
bro=webdriver.Firefox() #构建网页窗口对象
bro.maximize_window() #最大化窗口
bro.get("https://www.baidu.com/") #打开指定网址
# bro.find_element_by_xpath("html/body/div[1]/div[1]/div/div[3]/a[1]").click() #绝对路径写法
bro.find_element_by_xpath(".//*[@name='tj_trnews']").click() #相对路径写法
sleep(2)
bro.quit()

总结:

1.xpath为万能定位方式,在没有其他属性时可以使用该方法进行定位

2.不同浏览器的xpath值可能不一样

补充:另外在43版本的火狐浏览器可以下载组件,点击菜单进入附加组件:

选择扩展,在扩展的输入框中输入Firebug,FirePath进行下载,图标如下。

下载好之后可以通过Firebug+FirePath组合来快速定位到xpath的路径。

例如安装好了Firebug和FirePath后,浏览器右上角有个小黄虫,按F12定位百度首页输入框:

以上框出来的XPath就是输入框的xpath相对路径的写法。

而在谷歌浏览器只要对着定位好的元素,右键选择Copy--->Copy Xpath即可。

但是和Firefox的xpath稍微有点不一样,这就是不同浏览器间xpath可能不一样的情况

猜你喜欢

转载自blog.csdn.net/Static_at/article/details/81084338