动态定位登录验证码识别代码(使用该方法识别率比较低)

动态定位登录验证码识别代码(使用该方法识别率比较低)

coding=utf-8

import json
import time
from collections import OrderedDict

import requests
from pytesseract import image_to_string, pytesseract
from PIL import Image, ImageEnhance
from selenium import webdriver
from selenium.webdriver.common.by import By

这里是要安装Tesseract-OCR的(图文识别)

具体的安装方式可以看这里https://blog.csdn.net/qq_37193537/article/details/81335165从网盘下载那个

pytesseract.tesseract_cmd = r"C:\Program Files (x86)\Tesseract-OCR\tesseract.exe"

def login():
# 这里是我用的chrome你的需要改回firefox
driver = webdriver.Firefox()
driver.get(“https://testq.ucarcloud.cn/login.html”)
driver.implicitly_wait(2)
# 窗口打开最大化
driver.maximize_window()
# 定位账号位置并清空账号内容
driver.find_element_by_xpath("/html/body/div/div[2]/div[1]/input").clear()
# 输入账号名
driver.find_element_by_xpath("/html/body/div/div[2]/div[1]/input").send_keys(“麦客”)
driver.find_element_by_xpath("/html/body/div/div[2]/div[2]/input").clear()
driver.find_element_by_xpath("/html/body/div/div[2]/div[2]/input").send_keys(“123456”)
# 获取验证码图片元素
# driver.find_element_by_xpath("/html/body/div/div[2]/div[4]/img")
driver.find_element_by_xpath("/html/body/div/div[2]/div[4]/img")
# 2、截取屏幕内容,保存到本地
driver.save_screenshot(“E://test/01.png”)

# 3、打开截图,获取验证码位置,截取保存验证码
ran = Image.open("E://test/01.png")
# 这里的尺寸是自己设置的
box = (810, 486, 985, 556)  # 获取验证码位置,自动定位不是很明白,就使用了手动定位,代表(左,上,右,下)
ran.crop(box).save("E://test/02.png")
# 4、获取验证码图片,读取验证码
imageCode = Image.open("E://test/02.png")  # 图像增强,二值化
# imageCode.load()r
sharp_img = ImageEnhance.Contrast(imageCode).enhance(4.0)
sharp_img.save("E://test/03.png")
# sharp_img.load()  # 对比度增强
# time.sleep(2)
# print(sharp_img)
# 这里的识别度不太高只有干扰少的时候可以识别出来 config="-psm 10"是将整个图像当成一个汉字来操作
code = image_to_string(sharp_img, lang="eng", config="-psm 10")
# 5、收到验证码,进行输入验证
print("验证码", code)
driver.find_element_by_xpath("/html/body/div/div[2]/div[3]/input").clear()
driver.find_element_by_xpath("/html/body/div/div[2]/div[3]/input").send_keys(code)
driver.find_element_by_xpath('//*[@id="rrapp"]/div[2]/div[5]/div[2]/button').click()
# 这里我们检测一下是不是登陆成功了,成功了就把driver返回去后面可以继续使用失败了就退出然后重新尝试打开
time.sleep(1)
try:
    welcome = driver.find_element_by_xpath('//*[@id="rrapp"]/header/nav/div[1]').text
    print(welcome)
    return (True, driver)
except:
    driver.quit()
    return (False, None)

def get_token(driver):
# 是要从localStorage中获取还是要从sessionStorage中获取,具体看目标系统存到哪个中
# window.sessionStorage和直接写sessionStorage是等效的
# 一定要使用return,不然获取到的一直是None
# get的Item不一定就叫token,得具体看目标系统把token存到哪个变量中
token = driver.execute_script(‘return localStorage.getItem(“token”);’)
print(‘token’, f"{token}")
return token

‘’’
因为识别率有点低所以这里写个循环的方式调用好了,尝试10次看看能不能登陆上去
‘’’

测试一下获取用户信息的接口

def test_GetInfo(token):
r = requests.get(‘https://testq.ucarcloud.cn/sys/user/info’, headers={“token”: token})
print(“使用token获取用户信息”, r.json())

if name == ‘main’:
dri = None
for i in range(10):
res, dri = login()
if res == True:
break
print(“完成登陆准备获取token”)
if dri is not None:
token = get_token(dri)
print(“从浏览器获取到的token是”, token)
test_GetInfo(token)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值