web 自动化-验证码识别登录 图片验证码
2021-03-18 22:24
标签:gen sim 顺序 agent 增加 read 地址 mys 用户 这个软件收费,这就很不好了 默认安装:打开 cmd,输入命令: pip install pillow 豆瓣格式:打开 cmd,输入命令: pip install -i https://pypi.douban.com/simple pillow 一般在我们测试过程中,登录遇到验证码的时候,有以下种解决方案: 1、第三方的打码平台识别 网络上的第三方打码平台众多,这里的选择 超级鹰 这个第三方的平台来给大家做演示。 地址:http://www.chaojiying.com/ 2、下载开发文档: 下载好的代码: 3、需要注册账号,在代码执行中会用到 ‘超级鹰用户名‘, ‘超级鹰用户名的密码‘, ‘软件id‘ 获取并输入图片验证码步骤顺序: *******请大家尊重原创,如要转载,请注明出处:转载自:https://www.cnblogs.com/shouhu/,谢谢!!******* web 自动化-验证码识别登录 图片验证码 标签:gen sim 顺序 agent 增加 read 地址 mys 用户 原文地址:https://www.cnblogs.com/shouhu/p/12764788.html1、pillow 模块安装(处理图像的库)
2、验证码的由来
3、web自动化验证码解决方案
4、识别验证码
import requests
from hashlib import md5
class Chaojiying_Client(object):
def __init__(self, username, password, soft_id):
self.username = username
password = password.encode(‘utf8‘)
self.password = md5(password).hexdigest()
self.soft_id = soft_id
self.base_params = {
‘user‘: self.username,
‘pass2‘: self.password,
‘softid‘: self.soft_id,
}
self.headers = {
‘Connection‘: ‘Keep-Alive‘,
‘User-Agent‘: ‘Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)‘,
}
def PostPic(self, im, codetype):
"""
im: 图片字节
codetype: 题目类型 参考 http://www.chaojiying.com/price.html
"""
params = {
‘codetype‘: codetype,
}
params.update(self.base_params)
files = {‘userfile‘: (‘ccc.jpg‘, im)}
r = requests.post(‘http://upload.chaojiying.net/Upload/Processing.php‘, data=params, files=files,
headers=self.headers)
return r.json()
def ReportError(self, im_id):
"""
im_id:报错题目的图片ID
"""
params = {
‘id‘: im_id,
}
params.update(self.base_params)
r = requests.post(‘http://upload.chaojiying.net/Upload/ReportError.php‘, data=params, headers=self.headers)
return r.json()
if __name__ == ‘__main__‘:
# 需要传三个参数‘超级鹰用户名‘, ‘超级鹰用户名的密码‘, ‘软件id‘
cjy = Chaojiying_Client(‘qq1938091409‘, ‘123456‘, ‘904651‘) # 用户中心>>软件ID 生成一个替换 96001
# 打开一个文件,读取图片的内容
im = open(‘a.jpg‘, ‘rb‘).read() # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
print(cjy.PostPic(im, 1902))
res = cjy.PostPic(im, 1902) # 1902 验证码类型 官方网站>>价格体系 3.4+版 print 后要加()
print(res[‘pic_str‘])
import time
from selenium import webdriver
from PIL import Image # pillow模块
from web_项目前期.a图片验证码.chaojiying import Chaojiying_Client
# 创建一个浏览器
driver = webdriver.Chrome()
# 访问登录页面
url = ‘http://www.chaojiying.com/user/mysoft/‘
driver.get(url)
time.sleep(2) # 暂停一秒钟
# 选择账号、密码输入栏,输入对应的账号密码
input_user = driver.find_element_by_xpath(‘/html/body/div[3]/div/div[3]/div[1]/form/p[1]/input‘)
input_user.send_keys(‘qq121292679‘)
input_pwd = driver.find_element_by_xpath(‘/html/body/div[3]/div/div[3]/div[1]/form/p[2]/input‘)
input_pwd.send_keys(‘546245426‘)
# 获取验证码的图片,并进行识别,将识别的结果,输入到验证码输入框中
# 对当前页面进行截图
driver.save_screenshot(‘login.png‘)
# 选择验证码图片的元素
yzm_btn = driver.find_element_by_xpath(‘/html/body/div[3]/div/div[3]/div[1]/form/div/img‘)
# 获取图片元素的位置
loc = yzm_btn.location
# 获取图片的宽高
size = yzm_btn.size
print(loc)
print(size)
# 获取验证码上下左右的位置,电脑的缩放比例125%(100%就不需要乘),需要乘以1.25,否则会出现定位不准确
left = loc[‘x‘]*1.25
top = loc[‘y‘]*1.25
right = (loc[‘x‘] + size[‘width‘])*1.25
botom = (loc[‘y‘] + size[‘height‘])*1.25
val = (left, top, right, botom) # 得到左上右下的值,顺序固定
# 打开网页截图
login_pic = Image.open(‘login.png‘)
# 通过左上右下的值,去截取验证码
yzm_pic = login_pic.crop(val)
# 保存验证码
yzm_pic.save(‘yzm.png‘)
# 识别验证码
cjy = Chaojiying_Client(‘qq121292679‘, ‘546245426‘, ‘96001‘) # 用户中心>>软件ID 生成一个替换 96001
im = open(‘yzm.png‘, ‘rb‘).read() # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
res = cjy.PostPic(im, 1902) # 1902 验证码类型 官方网站>>价格体系 3.4+版 print 后要加()
data = res[‘pic_str‘]
print(data)
# 在输入框输入验证码
yzm_input = driver.find_element_by_xpath(‘/html/body/div[3]/div/div[3]/div[1]/form/p[3]/input‘)
yzm_input.send_keys(data)
# 点击登录
submit = driver.find_element_by_xpath(‘/html/body/div[3]/div/div[3]/div[1]/form/p[4]/input‘)
submit.click()
# 登录之后等待5秒 关闭浏览器
time.sleep(5)
driver.close()
下一篇:JS求字符串长度
文章标题:web 自动化-验证码识别登录 图片验证码
文章链接:http://soscw.com/index.php/essay/65958.html