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

作者:qaz3171210 时间:2022-05-03 10:35:40 

从最简单的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()

来源:https://blog.csdn.net/qaz3171210/article/details/78007133

标签:Selenium,Python,验证码,图片,校验
0
投稿

猜你喜欢

  • python 绘制正态曲线的示例

    2023-08-22 10:52:14
  • python绘制BA无标度网络示例代码

    2021-05-29 14:01:52
  • CSS关于Border你可能会不注意的东西

    2007-10-20 13:50:00
  • Python Json数据文件操作原理解析

    2022-10-27 19:00:32
  • 解决MSSQL下“不能在手动或分布事务方式下创建新的连接”的问题

    2008-07-15 12:48:00
  • 做设计还是做产品

    2009-06-11 13:01:00
  • 解读ASP.NET 5 & MVC6系列教程(9):日志框架

    2023-06-30 06:10:57
  • python随机获取列表中某一元素的方法

    2023-08-23 18:25:13
  • python中的np.argmax() 返回最大值索引号

    2022-08-07 14:22:57
  • python中ImageTk.PhotoImage()不显示图片却不报错问题解决

    2023-08-26 18:12:06
  • 在pandas多重索引multiIndex中选定指定索引的行方法

    2023-07-07 22:04:16
  • IE6图片加载的一个BUG解决方法

    2023-09-16 03:20:10
  • Python3 无重复字符的最长子串的实现

    2021-12-09 21:36:24
  • 好用的asp防SQL注入代码

    2008-10-24 08:36:00
  • asp金额大小写转换完全无错版

    2007-09-26 09:38:00
  • asp更改Windows2000管理者密码?

    2010-06-26 11:03:00
  • Python 的AES加密与解密实现

    2022-07-09 21:49:49
  • Python使用functools模块中的partial函数生成偏函数

    2024-01-01 21:26:47
  • Golang算法问题之整数拆分实现方法分析

    2023-07-01 00:39:36
  • Google谷歌的CSS前景图片合并技术

    2009-07-13 12:21:00
  • asp之家 网络编程 m.aspxhome.com