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计算一个序列的平均值的方法
Jul 11 Python
实例解析Python设计模式编程之桥接模式的运用
Mar 02 Python
详解python中xlrd包的安装与处理Excel表格
Dec 16 Python
python迭代dict的key和value的方法
Jul 06 Python
Python随机生成身份证号码及校验功能
Dec 04 Python
Python里字典的基本用法(包括嵌套字典)
Feb 27 Python
numpy数组广播的机制
Jul 12 Python
python处理自动化任务之同时批量修改word里面的内容的方法
Aug 23 Python
Django使用消息提示简单的弹出个对话框实例
Nov 15 Python
python爬虫开发之selenium模块详细使用方法与实例全解
Mar 09 Python
使用PyCharm安装pytest及requests的问题
Jul 31 Python
Pytorch中使用ImageFolder读取数据集时忽略特定文件
Mar 23 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
php设计模式 State (状态模式)
2011/06/26 PHP
linux系统上支持php的 iconv()函数的方法
2011/10/01 PHP
CI框架验证码CAPTCHA辅助函数用法实例
2014/11/05 PHP
php将12小时制转换成24小时制的方法
2015/03/31 PHP
php微信公众平台交互与接口详解
2016/11/28 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
工作需要写的一个js拖拽组件
2011/07/28 Javascript
关于jQuery新的事件绑定机制on()的使用技巧
2013/04/26 Javascript
JS实现仿京东淘宝竖排二级导航
2014/12/08 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
jQuery3.0中的buildFragment私有函数详解
2016/08/16 Javascript
JavaScript中获取时间的函数集
2016/08/16 Javascript
vue使用watch 观察路由变化,重新获取内容
2017/03/08 Javascript
javascript防篡改对象实例详解
2017/04/10 Javascript
微信小程序tabBar底部导航中文注解api详解
2017/08/16 Javascript
javascript实现多边形碰撞检测
2020/10/24 Javascript
解决vue项目运行npm run serve报错的问题
2020/10/26 Javascript
vue 解决mintui弹窗弹起来,底部页面滚动bug问题
2020/11/12 Javascript
[00:27]DOTA2荣耀之路2:Patience from zhou!
2018/05/24 DOTA
python3中的md5加密实例
2018/05/29 Python
python实现名片管理系统项目
2019/04/26 Python
matplotlib 对坐标的控制,加图例注释的操作
2020/04/17 Python
Python爬虫教程之利用正则表达式匹配网页内容
2020/12/08 Python
HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
2015/01/01 HTML / CSS
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
法国房车租赁网站:Yescapa
2019/08/26 全球购物
求两个数的乘积和商数,该作用由宏定义来实现
2013/03/13 面试题
东方红海科技面试题软件测试方面
2012/02/08 面试题
生物学学生自我评价
2014/01/17 职场文书
革命英雄事迹演讲稿
2014/09/13 职场文书
学习三严三实对照检查材料思想汇报
2014/09/22 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
教师节感谢信
2015/01/22 职场文书
2015年学校精神文明工作总结
2015/05/27 职场文书
2019事业单位个人工作总结范文
2019/08/26 职场文书
vue组件冲突之引用另一个组件出现组件不显示的问题
2022/04/13 Vue.js