python xpath定位打印元素_Python+selenium web自动化

82b74529e0c37342c9cdc73ef42d0c0a.png

Python+Selenium自动化

以下内容都是是我的学习笔记,为方便自己查询就整理出来了,内容会精简很多,比如配置和安装插件,请自行查询操作。默认大家是有一定基础。

注:Python3版本请自行查询配置方法,以下都是在Python2版本上操作的。

好好学习,天天向上

老猪

Python版本:2.7.12

selenium版本:2.53.6

Firefox版本:45

IDE:Pycharm

一、浏览器基本操作

打开网站

1.第一步:从selenium里面导入webdriver模块
2.打开Firefox浏览器(Ie和Chrome对应下面的)
3.打开百度网址

a73d94c6a3e9bed84cd4f3d51cbcc53b.png

设置休眠

1.由于打开百度网址后,页面加载需要几秒钟,所以最好等到页面加载完成后再继续下一步操作
2.导入time模块,time模块是Python自带的,所以无需下载
3.设置等待时间,单位是秒(s),时间值可以是小数也可以是整数

df51cfe99e2f8c868de780b5827d6620.png

页面刷新

1.有时候页面操作后,数据可能没及时同步,需要重新刷新
2.这里可以模拟刷新页面操作,相当于浏览器输入框后面的刷新按钮

cc62cb139b1d18f02ef80381e8ba0e80.png

前进和后退

1.当在一个浏览器打开两个页面后,想返回上一页面,相当于浏览器左上角的左箭头按钮
2.返回到上一页面后,也可以切换到下一页,相当于浏览器左上角的右箭头按钮

4cf0e3da2bf614ef87b54a7cbb3adbef.png

设置窗口大小

1.可以设置浏览器窗口大小,如设置窗口大小为手机分辨率540*960
2.也可以最大化窗口

65186823c74482d0f8b1cbb70f94cdc6.png

截屏

1.打开网站之后,也可以对屏幕截屏
2.截屏后设置制定的保存路径+文件名称+后缀

e601028cbc8fac13a380264ad88c7395.png

退出

1.退出有两种方式,一种是close;另外一种是quit
2.close用于关闭当前窗口,当打开的窗口较多时,就可以用close关闭部分窗口
3.quit用于结束进程,关闭所有的窗口
4.最后结束测试,要用quit。quit可以回收c盘的临时文件

4d35d61caaab7fc6d1401c286953f396.png

二、元素定位

自动化只要掌握四步操作:获取元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告。本篇主要讲如何用firefox辅助工具进行元素定位。
元素定位在这四个环节中是至关重要的,如果说按学习精力分配的话,元素定位占70%;操作元素10%,获取返回结果10%;断言10%。如果一个页面上的元素不能被定位到,那后面的操作就无法继续了。接下来就来讲webdriver提供的八种基本元素定位方法。

一、环境准备:

1.浏览器选择:Firefox

2.安装插件:Firebug和FirePath(设置》附加组件》搜索:输入插件名称》下载安装后重启浏览器)

3.安装完成后,页面右上角有个小爬虫图标

4.快速查看xpath插件:XPath Checker这个可下载,也可以不用下载

5.插件安装完成后,点开附加组件》扩展,如下图所示

b2615596ef59ca46778324babab9e116.png

selenium的webdriver提供了八种基本的元素定位方法,前面六种是通过元素的属性来直接定位的,后面的xpath和css定位更加灵活,需要重点掌握其中一个。

二、查看页面元素:

以百度搜索框为例,先打开百度网页

1.点右上角爬虫按钮

2.点左下角箭头

3.讲箭头移动到百度搜索输入框上,输入框高亮状态

4.下方蓝色区域就是单位到输入框的属性:

<input id="kw" class="s_ipt" type="text" autocomplete="off" maxlength="100" name="wd">

059754f7a1d35cdb6cb7ca4634e9265c.png

8种基础定位方法

id--find_element_by_id()

1.从上面定位到的元素属性中,可以看到有个id属性:id="kw",这里可以通过它的id属性单位到这个元素。

2.定位到搜索框后,用send_keys()方法

0a926a68f869599750634d9f1e399eba.png

name--:find_element_by_name()

1.从上面定位到的元素属性中,可以看到有个name属性:name="wd",这里可以通过它的name属性单位到这个元素。

说明:这里运行后会报错,说明这个搜索框的name属性不是唯一的,无法通过name属性直接定位到输入框

919924a5d7151a445a32832084fce3ef.png

class--find_element_by_class_name()

1.从上面定位到的元素属性中,可以看到有个class属性:class="s_ipt",这里可以通过它的class属性定位到这个元素。

25e9fb68c1620daf3062fdab6d4489c1.png

注:send_keys()是向输入框内输入字符

tag--find_element_by_tag_name()

1.从上面定位到的元素属性中,可以看到每个元素都有tag(标签)属性,如搜索框的标签属性,就是最前面的input

2.很明显,在一个页面中,相同的标签有很多,所以一般不用标签来定位。以下例子,仅供参考和理解,运行肯定报错

dd3e910f0849c8d4c22be564ccce637b.png

注:send_keys()是向输入框内输入字符

link--find_element_by_link_text()

3a3c6ce19647482eedb79ee1ed51d2d6.png

红框中为超链接,这种为文字链接,对于这种元素,我们就可以这种方法

5fb9d47da8777e1295d8e2b7aa3290f0.png

partial_link--find_element_by_partial_link_text()

1.有时候一个超链接它的字符串可能比较长,如果输入全称的话,会显示很长,这时候可以用一模糊匹配方式,截取其中一部分字符串就可以了

2.如“hao123”,只需输入“ao12”也可以定位到

3eab41057fc4f8e62685b967fd9b7b49.png

注:鼠标左键点击为:click()

xpath--find_element_by_xpath()

1.以上定位方式都是通过元素的某个属性来定位的,如果一个元素它既没有id、name、class属性也不是超链接,这么办呢?或者说它的属性很多重复的。这个时候就可以用xpath解决

2.xpath是一种路径语言,跟上面的定位原理不太一样,首先第一步要先学会用工具查看一个元素的xpath

ce9b757438dcf193c5b4d6826a6a459d.png

797e71add7d065aa3cc825333ec043a8.png

注:当前xpath定位方法是通过工具定位,更多xpath定位方法

其中kw要用单引号,避免双引号之间相互影响

css--find_element_by_css_selector()

1.css是另外一种语法,比xpath更为简洁,但是不太好理解。这里先学会如何用工具查看,后续的教程再深入讲解

2.打开FirePath插件选择css

3.定位到后如下图红色区域显示

9514bbc41f790aee83c40844de9c0ace.png

b517568acf68f526111ff143cc522305.png

三、xptah定位

ad1e5279f9ee666f96285739fe2d1657.png

1.xpath:属性定位(id,name,class)

eac9392cb1b563939844af39957ffab6.png

其中kw要用单引号,避免双引号之间相互影响

2.xpath:其它属性

如果一个元素id、name、class属性都没有,这时候也可以通过其它属性定位到

e2c27b50934c44392f9d9f59ee763478.png

注:上面的写位总会发现*这个符号,解释往下看

3.xpath:标签

1.有时候同一个属性,同名的比较多,这时候可以通过标签筛选下,定位更准一点

2.如果不想制定标签名称,可以用*号表示任意标签

3.如果想制定具体某个标签,就可以直接写标签名称

523803db5061bb867735285bafa6d770.png

注:就是将*替换成了input标签名

对比下图

bffb75157482da8335e9e66c1e633639.png

4.xpath层级

1.如果一个元素,它的属性不是很明显,无法直接定位到,这时候我们可以先找它老爸(图中数字1)

2.找到它老爸后,再找下个层级就能定位到了

c138039d4e11aa5fa3435d293bcab5c5.png

3.如上图所示,要定位的是input这个标签,它的老爸的 class="sec-input-box yuyin-cur"

4.要是它老爸的属性也不是很明显,就找它爷爷id=form(图中数字2)

5.于是就可以通过层级关系定位到

91ed6809f0c7270c82dd32db2c4739f0.png

xpath索引

百度主页--设置--搜索设置

1.如果一个元素它的兄弟元素跟它的标签一样,这时候无法通过层级定位到。因为都是一个父亲生的,多胞胎兄弟。

2.虽然双胞胎兄弟很难识别,但是出生是有先后的,于是可以通过它在家里的排行老几定位到。

3.如下图三胞胎兄弟

9507a3a4375ea94f14decf8543e79dd5.png

​4.用xpath定位老大、老二和老三(这里索引是从1开始算起的,跟Python的索引不一样)

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值