Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
作者:qaz3171210 发布时间:2022-05-03 10:35:40
从最简单的Web浏览器的登录界面开始,登录界面如下:
进行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查看页面元素。
右键文本框查看元素(以用户名文本框为例)
在该文本框中输入用户名“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查看元素如图:
代码如下:
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()
来源:https://blog.csdn.net/qaz3171210/article/details/78007133


猜你喜欢
- 按照某一列排序d = {'A': [3, 6, 6, 7, 9], 'B': [2, 5, 8, 0, 0]
- golang时间格式化科普 CST 含义CST: 中部标准时间 (Central Standard Time) 同时表示下面4个时区CST
- 一、route()路由概述功能:将URL绑定到函数路由函数route()的调用有两种方式:静态路由和动态路由二、静态路由和动态路径方式1:静
- 设计与开发之间本有一线界限,但当时代步入又一个十年,这个线变得更加模糊甚至感觉不到它的存在。使用PS设计网页版面,足矣?或许五年前是吧!现在
- 基本示例?计算属性允许我们声明性地计算衍生值。然而在有些情况下,我们需要在状态变化时执行一些“副作用&rdquo
- “重构”的春风吹遍大江南北,互联网一时间风声鹤唳,“div+CSS”俨然已成为一种“时尚”,难以尽数的网站都不约而同地开始了自己的“重构”。
- 可以用作一些资源的释放。1.在一个函数内的defer执行顺序是先写的后执行,后写的先执行(遵循栈结构)func DeferTest1(){
- 学了一天pygame,用python和pygame写一个简单的挡板弹球游戏GitHub:EasyBaffleBallGame# -*- co
- 导言如我们在之前的教程里讨论的那样,分页可以通过两种方法来实现:1.默认分页– 你仅仅只用选中data Web control的 智能标签的
- Restful风格的WebService正在渐渐取代传统的SOAP, Java 也有很多Restful的框架,很方便简洁,Jersey,re
- ini文件即Initialization File初始化文件,在应用程序及框架中常作为配置文件使用,是一种静态纯文本文件,使用记事本即可编辑
- 版本:python2.7 2.7 2.7!!!症状:比如,我编写了一个字符串number,输出到网页上,变成了u'number
- 导言就计算机科学而言,caching就是将所需要的数据或信息的备份放在某个地方,便于快速访问的这样一个过程。以数据处理(data-drive
- 本文实例讲述了python将文本转换成图片输出的方法。分享给大家供大家参考。具体实现方法如下:#-*- coding:utf-8 -*-fr
- pip install prettytable每次添加一行from prettytable import PrettyTable# &nbs
- 看着这个题目可能大家会有点陌生,不知道是什么,说的直白一点,RDFa就是让你的页面更好的被机器所理解,而不简简单单是展示你的页面,下面就关于
- 本文实例讲述了Vue开发之封装上传文件组件与用法。分享给大家供大家参考,具体如下:使用elementui的 el-upload插件实现图片上
- 本文实例讲述了Python实现的网页截图功能。分享给大家供大家参考,具体如下:方法一、使用PyQt4的QtWebKit组件#!/usr/bi
- 因此,我们主要解决的思路是效验session ID的有效性. 以下为引用的内容: <?php if(!isset($_SESSION[
- 我们都知道,matlab是一个非常好用的矩阵计算分析软件,然额,matlab自带的绘图效果极为锯齿,所以,这里分享一个在python中读取m