Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)


Posted in Python onJune 28, 2019

从最简单的Web浏览器的登录界面开始,登录界面如下:

Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)

进行Web页面自动化测试,对页面上的元素进行定位和操作是核心。而操作又是以定位为前提的,因此,对页面元素的定位是进行自动化测试的基础。

页面上的元素就像人一样,有各种属性,比如元素名字,元素id,元素属性(class属性,name属性)等等。webdriver就是利用元素的这些属性来进行定位的。

可以用于定位的常用的元素属性:

id

name

class name

tag name

link text

partial link text

xpath

css selector

对应于webdriver中的定位方法分别是:

driver.find_element_by_name()——最常用,简单

driver.find_element_by_id()——最常用,简单

driver.find_element_by_class_name()

driver.find_element_by_tag_name()——最不靠谱

driver.find_element_by_link_text()——定位文字连接好用

driver.find_element_by_partial_link_text()——定位文字连接好用

driver.find_element_by_xpath()——最灵活,万能

driver.find_element_by_css_selector()

上面是定位一个元素的方法,相应的webdriver也有定位一组元素的方法:

driver.find_elements_by_name() 
driver.find_elements_by_id() 
driver.find_elements_by_class_name() 
driver.find_elements_by_tag_name() 
driver.find_elements_by_link_text() 
driver.find_elements_by_partial_link_text() 
driver.find_elements_by_xpath() 
driver.find_elements_by_css_selector()

由界面可以看出,主要需要三个输入数据,首先我们要掌握F12查看页面元素。

右键文本框查看元素(以用户名文本框为例)

Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)

在该文本框中输入用户名“XXX”,代码如下:

driver.find_element_by_id("os_username").send_keys("XXX")

密码同理。

验证码操作较为复杂,需要用到PIL+tesseract+image代码库,需提前准备。我的思路是首先采用driver.save_screenshot(“test.png”)截取该完整登录界面并保存,而后选取验证码区域进行截取保存,区域选取采用region = (left.x, left.y, right.x, right.y),其中(left.x,left.y)为左上角像素坐标,(right.x,right.y)为右下角像素坐标,采用nimg = img.crop(region)来截取验证码区域并用nimg.save(“new_test.png”)来保存。最后采用pytesseract.image_to_string(image)方法将图片验证码转换成字符串。具体代码实现详见附后代码。

三个输入完成后,即是登录按钮的点击,F12查看元素如图:

代码如下:

Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)

driver.find_element_by_class_name("btnSub").click()

此时即可完成登录,注意,该识别验证码的方法只能识别简单验证码,过于复杂的识别会有错误。

注:若登陆名为汉字需要使用

G = u”登录名” 
driver.find_element_by_id(“os_username”).send_keys(G)

详细代码

# -*- coding: utf-8 -*-
 #coding=UTF-8

 from selenium import webdriver
 from PIL import Image
 import pytesseract
 driver = webdriver.Chrome() 
 driver.get('http://XXX') #该处为具体网址
 driver.refresh()   #刷新页面
 driver.maximize_window() #浏览器最大化
 driver.save_screenshot("test.png")

 img = Image.open("test.png")
 region = (940, 355, 1030, 385)#根据具体情况修改
 nimg = img.crop(region)
 nimg.save("new_test.png")

 image = Image.open("new_test.png")
 vcode = pytesseract.image_to_string(image)
 driver.find_element_by_id("os_username").send_keys("XX
X")
 driver.find_element_by_id("password").send_keys("XXX")
 driver.find_element_by_id("RandomCode").send_keys(vc
ode)
 driver.find_element_by_class_name("btnSub").click()

以上这篇Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python基础教程之udp端口扫描
Feb 10 Python
python通过BF算法实现关键词匹配的方法
Mar 13 Python
用Python制作简单的朴素基数估计器的教程
Apr 01 Python
对于Python的框架中一些会话程序的管理
Apr 20 Python
Python爬虫抓取手机APP的传输数据
Jan 22 Python
python数据结构之链表的实例讲解
Jul 25 Python
Python基于最小二乘法实现曲线拟合示例
Jun 14 Python
python Gunicorn服务器使用方法详解
Jul 22 Python
python 爬取马蜂窝景点翻页文字评论的实现
Jan 20 Python
详解python中的异常捕获
Dec 15 Python
Python 用户输入和while循环的操作
May 23 Python
聊聊Python String型列表求最值的问题
Jan 18 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
Jun 28 #Python
Pyqt QImage 与 np array 转换方法
Jun 27 #Python
pyqt5 使用cv2 显示图片,摄像头的实例
Jun 27 #Python
对python中GUI,Label和Button的实例详解
Jun 27 #Python
python 整数越界问题详解
Jun 27 #Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
Jun 27 #Python
python 反编译exe文件为py文件的实例代码
Jun 27 #Python
You might like
MYSQL数据库初学者使用指南
2006/11/16 PHP
php性能优化分析工具XDebug 大型网站调试工具
2011/05/22 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
php高清晰度无损图片压缩功能的实现代码
2018/12/09 PHP
setTimeout和setInterval的区别你真的了解吗?
2011/03/31 Javascript
jQuery中map()方法用法实例
2015/01/06 Javascript
jQuery晃动层特效实现方法
2015/03/09 Javascript
CSS3实现动态背景登录框的代码
2015/07/28 Javascript
js实现可控制左右方向的无缝滚动效果
2016/05/29 Javascript
jquery 手势密码插件
2017/03/17 Javascript
Vue.js基础学习之class与样式绑定
2017/03/20 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
vue插件vue-resource的使用笔记(小结)
2017/08/04 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
2017/08/16 Javascript
详解webpack4升级指南以及从webpack3.x迁移
2018/06/12 Javascript
[00:21]DOTA2亚洲邀请赛 Logo演绎
2015/02/07 DOTA
python发送邮件脚本
2018/05/22 Python
django主动抛出403异常的方法详解
2019/01/04 Python
Python Selenium 之数据驱动测试的实现
2019/08/01 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
Python selenium自动化测试模型图解
2020/04/15 Python
Python爬虫与反爬虫大战
2020/07/30 Python
HTML5 canvas标签实现刮刮卡效果
2015/04/24 HTML / CSS
小米乌克兰网上商店:Xiaomi.UA
2019/10/29 全球购物
英国森林假期:Forest Holidays
2021/01/01 全球购物
中科方德软件测试面试题
2016/04/21 面试题
工程招投标邀请书
2014/01/26 职场文书
《日月潭》教学反思
2014/02/28 职场文书
单位未婚证明范本
2014/11/25 职场文书
2014年教研员工作总结
2014/12/23 职场文书
狼牙山五壮士观后感
2015/06/09 职场文书
巾帼建功标兵先进事迹材料
2016/02/29 职场文书
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL
go语言中http超时引发的事故解决
2021/06/02 Golang
Python实现天气查询软件
2021/06/07 Python
mysql 乱码 字符集latin1转UTF8
2022/04/19 MySQL