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实现封装得到virustotal扫描结果
Oct 05 Python
centos6.7安装python2.7.11的具体方法
Jan 16 Python
利用PyInstaller将python程序.py转为.exe的方法详解
May 03 Python
Python使用django搭建web开发环境
Jun 09 Python
python在每个字符后添加空格的实例
May 07 Python
PyTorch搭建一维线性回归模型(二)
May 22 Python
python使用minimax算法实现五子棋
Jul 29 Python
python同步windows和linux文件
Aug 29 Python
信号生成及DFT的python实现方式
Feb 25 Python
Python基于当前时间批量创建文件
May 07 Python
彻底搞懂python 迭代器和生成器
Sep 07 Python
使用AJAX和Django获取数据的方法实例
Oct 25 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数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
深入解析PHP的引用计数机制
2013/06/14 PHP
PHP实现的memcache环形队列类实例
2015/07/28 PHP
PHP实现连接设备、通讯和发送命令的方法
2015/10/13 PHP
php实现图片压缩处理
2020/09/09 PHP
做网页的一些技巧
2007/02/01 Javascript
javascript 自动填写表单的实现方法
2010/04/09 Javascript
基于jquery的禁用右键、文本选择功能、复制按键的实现代码
2013/08/27 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
js实现三级联动效果(简单易懂)
2017/03/27 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
2017/11/26 Javascript
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
2018/05/15 NodeJs
Angular6 发送手机验证码按钮倒计时效果实现方法
2019/01/08 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
使用Python下载歌词并嵌入歌曲文件中的实现代码
2015/11/13 Python
Python 爬虫学习笔记之多线程爬虫
2016/09/21 Python
python回调函数中使用多线程的方法
2017/12/25 Python
Python实现扣除个人税后的工资计算器示例
2018/03/26 Python
配置 Pycharm 默认 Test runner 的图文教程
2018/11/30 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
2019/06/03 Python
Django CBV类的用法详解
2019/07/26 Python
python3.7环境下安装Anaconda的教程图解
2019/09/10 Python
python中调试或排错的五种方法示例
2019/09/12 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
2020/01/13 Python
Python openpyxl 插入折线图实例
2020/04/17 Python
Python基于Socket实现简易多人聊天室的示例代码
2020/11/29 Python
anello泰国官方网站:日本流行包包品牌
2019/08/08 全球购物
加拿大品牌鞋包连锁店:Little Burgundy
2021/02/28 全球购物
企业授权委托书范本
2014/04/02 职场文书
幼儿园亲子活动总结
2014/04/26 职场文书
纺织工程专业推荐信
2014/09/08 职场文书
2014年初一班主任工作总结
2014/11/08 职场文书
重温经典:乔布斯在斯坦福大学的毕业演讲(双语)
2019/08/26 职场文书
导游词之山西祁县乔家大院
2019/10/14 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书
Python编解码问题及文本文件处理方法详解
2021/06/20 Python