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网络爬虫采集联想词示例
Feb 11 Python
提升Python程序运行效率的6个方法
Mar 31 Python
Djang中静态文件配置方法
Jul 30 Python
python实现redis三种cas事务操作
Dec 19 Python
对python 生成拼接xml报文的示例详解
Dec 28 Python
利用python-docx模块写批量生日邀请函
Aug 26 Python
使用PyTorch实现MNIST手写体识别代码
Jan 18 Python
30行Python代码实现高分辨率图像导航的方法
May 22 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
Jul 03 Python
Python识别验证码的实现示例
Sep 30 Python
如何向scrapy中的spider传递参数的几种方法
Nov 18 Python
浅谈Python协程asyncio
Jun 20 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/25 PHP
PHP 危险函数解释 分析
2009/04/22 PHP
仿AS3实现PHP 事件机制实现代码
2011/01/27 PHP
LotusPhp笔记之:基于ObjectUtil组件的使用分析
2013/05/06 PHP
使用PHP计算两个路径的相对路径
2013/06/14 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(七)
2014/06/23 PHP
php利用反射实现插件机制的方法
2015/03/14 PHP
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
PHP defined()函数的使用图文详解
2019/07/20 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
2020/01/04 PHP
没有document.getElementByName方法
2013/08/19 Javascript
Bootstrap每天必学之导航条
2015/11/27 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
微信端开发--登录小程序步骤
2017/01/11 Javascript
nodejs 图解express+supervisor+ejs的用法(推荐)
2017/09/08 NodeJs
vue-router 组件复用问题详解
2018/01/22 Javascript
在vue里使用codemirror遇到的问题
2018/11/01 Javascript
原生JS实现的放大镜特效示例【测试可用】
2018/12/08 Javascript
Vue代码整洁之去重方法整理
2019/08/06 Javascript
Python Web框架Flask下网站开发入门实例
2015/02/08 Python
Python实现的简单dns查询功能示例
2017/05/24 Python
Python生成随机密码的方法
2017/06/16 Python
简单了解Python中的几种函数
2017/11/03 Python
python 多线程将大文件分开下载后在合并的实例
2018/11/09 Python
解决TensorFlow调用Keras库函数存在的问题
2020/07/06 Python
巴西婴儿用品商店:Bebe Store
2017/11/23 全球购物
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
通息工程毕业生自荐信
2013/10/16 职场文书
本科毕业生求职自荐信
2014/02/03 职场文书
学生打架检讨书
2014/02/14 职场文书
村干部承诺书
2014/03/28 职场文书
监察建议书格式
2014/05/19 职场文书
趣味运动会开幕词
2015/01/28 职场文书
护理工作个人总结
2015/03/03 职场文书
青涩记忆观后感
2015/06/18 职场文书
心理学培训心得体会
2016/01/22 职场文书