0


UI自动化实现登录+验证码识别(Python+Selenium+ddddocr)

背景:

一直想尝试用 Python+Selenium+ddddocr 来实现登录,但是每次到验证码这关就难住了,在网上大部分识别验证码的Python文章都是大段篇幅,让我这个小菜鸟无法下手。今天终于通过30行的代码实现了:通过UI自动化,可以输入账号,密码,可以识别简单的验证码 ,点击登录按钮,成功登录页面 。

前提:

  1. 已安装python <= 3.9 版本(我之前安装的是3.10.x版本,不行,友友们必须要下载python <= 3.9的版本)
  2. 导入 selenium 包
  3. 导入 ddddocr 包
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple ddddocr

代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
import ddddocr

# 不自动关闭浏览器
option = webdriver.ChromeOptions()
option.add_experimental_option("detach",True)# 注意此处添加了chrome_options参数# 访问登录页面
driver = webdriver.Chrome(chrome_options=option)
driver.get('http://登录页面URL')# 获取验证码,存储为本地图片
img = driver.find_element(By.XPATH,'/html/body/div[1]/div/div/div[2]/div/div/div/form/div[1]/div[3]/div[1]/div[4]/div[2]/img')# 将获取的图片命名为7.png
img.screenshot('7.png')# 通过ddddocr包识别验证码
ocr = ddddocr.DdddOcr(old=True)withopen("7.png",'rb')as f:
    image = f.read()# 将识别后的验证码4位数存储进res变量
res = ocr.classification(image)# 定位用户名,密码输入框,验证码
username = driver.find_element(By.ID,'username')
password = driver.find_element(By.ID,'password')
inputcode = driver.find_element(By.ID,'inputCode')# 将自己的用户名密码替换xxxxxx
username.send_keys('Seven')
password.send_keys('Seven1234.')
inputcode.send_keys(res)# 定位登录按钮并点击
driver.find_element(By.XPATH,'/html/body/div[1]/div/div/div[2]/div/div/div/form/div[2]/div/div/span/button').click()

注解:

获取元素的几种方式:

通过浏览器驱动获取 单个元素页面元素的8种方式
(1) 通过webdriver对象的find_element方法

通过 id获取元素

el = driver.find_element(By.ID, ‘id’)

通过 name获取元素

el = driver.find_element(By.NAME, ‘name’)

通过 className获取元素

el = driver.find_element_by_class_name(className)

通过 tagName获取元素

el = driver.find_element(By.TAG_NAME, ‘tagName’)

通过 xpath获取元素

el = driver.find_element(By.XPATH, ‘xpath’)

通过 css获取元素

el = driver.find_element(By.CSS_SELECTOR, ‘css’)

通过 link_text 获取元素

el = driver.find_element(By.LINK_TEXT, ‘linkText’)

通过 partial_link_text获取元素

el = driver.find_element(By.PARTIAL_LINK_TEXT, ‘linkPartText’)

(2) 通过webdriver对象的find_element_by_xx(" ")
*在selenium的4.0版本中此种用法已经抛弃,不推荐使用

通过 id获取元素

el = driver.find_element_by_id(id)

通过 name获取元素

el = driver.find_element_by_name(name)

通过 className获取元素

el = driver.find_element_by_class_name(className)

通过 tagName获取元素

el = driver.find_element_by_tag_name(tagName)

通过 xpath获取元素

el = driver.find_element_by_xpath(xpath)

通过 css获取元素

el = driver.find_element_by_css_selector(css)

通过 link_text 获取元素

el = driver.find_element_by_link_text(linkText)

通过 partial_link_text获取元素

el = driver.find_element_by_partial_link_text(linkPartText)

定位策略

ID:id是指页面元素的属性名id值,因为元素id在整个页面中是唯一的,所以如果元素有id属性,通过id定位是首选的方式。如果 id 不唯一则不建议使用。
NAME:通过元素的name属性进行定位。
CLASS NAME:通过元素的class name属性进行定位。
TAG NAME:通过元素名定位,基本不用,因为相同的tagname太多。
LINK_TEXT:通过链接文本内容全匹配。
PARTIAL LINK:通过链接文本内容模糊匹配。
CSS:css_selector定位。
XPATH:通过xpath表达式定位,鼠标右键元素 → 点击检查 → 查看开发者工具中的元素
→ 鼠标悬浮在对应代码上,页面上对应的元素被选中 → 通过以下方式复制完整 xpath(懒人福音,不用手写,也不怕写错)
在这里插入图片描述

识别验证码

ddddocr 包开发者个人博客:wenanzhe.com
里面有他的两篇博文,感兴趣的可以过去看看~


本文转载自: https://blog.csdn.net/pytester/article/details/127182741
版权归原作者 pytester 所有, 如有侵权,请联系我们删除。

“UI自动化实现登录+验证码识别(Python+Selenium+ddddocr)”的评论:

还没有评论