python注册登录脚本demo|request请求--json数据处理--数字型图形验证码识别pytesseract--数据库操作pymysql--unittest使用--将元组转换为字符串

一、功能简介:

通过接口进行网站的注册和登录请求,目的是提供用户名和密码即可一键注册成功。此为学习之作,只求功能实现。

涉及到的知识有:request请求--json数据处理--数字型图形验证码识别pytesseract--数据库操作pymysql--unittest使用--将元组转换为字符串

二、准备工作:

需要安装以下模块:

python3

Tesseract-OCR

pip install requests

pip install jsonpointer

pip install Pillow

pip install pytesseract

pip install pymysql

可能遇到的问题如下:

1.若进行图像识别时出现错误,则参考如下链接:

https://www.cnblogs.com/tanghuang/p/6380588.html

https://www.cnblogs.com/hupeng1234/p/7136442.html

2. 安装Pillow时对pip版本有要求,若pip版本太低,则需要升级pip。windows下的升级命令为:python -m pip install -U pip;

linux或者macos上的pip升级命令为为:pip install -U pip。若升级时提示已经升级成功,但使用时pip命令时,版本还是升级前的版本,则进入到D:\Program Files (x86)\Python34\Lib\site-packages,将pip-10.0.1.dist-info文件夹删除,再重新运行pip更新命令即可。

三、代码片段:

1. request请求&json数据处理

import requests
import json
import jsonpointer

body = {"loginName": mobile, "loginPwd": loginPwd,"appVersion": "3.0.4","clientSide": "web"}
http_client = requests.post("https://www.xxxxxx/webapi/login", data=body)
rev_msg = http_client.json()
#json.dumps()用来json格式展示pyton对象。ensure_ascii默认为True,这会导致python对象中的中文字符展示为ascii编码。indent表示缩进
rev_msg = json.dumps(rev_msg, ensure_ascii=False, indent=2)
print("-------------登录请求的结果-------------")
print(rev_msg)
# json.loads()用于解码 JSON 数据,该函数返回 Python 字段的数据类型
json_dict = json.loads(rev_msg)
code = jsonpointer.resolve_pointer(json_dict, "/code")
self.assertEqual(code, 0)

2. 数字型图形验证码识别:

from PIL import Image
import pytesseract

 
#获取图形验证码
body = {"moduleId":"REGISTERIMAGE", "height":"35", "width": "84", "r": "12345678"}
http_client = requests.get("https://xxxxxxx/webapi/generateImageCode", params=body)
#文件一定要以二进制方式打开
with open('picture.jpg','wb') as file1:
    file1.write(http_client.content)
    file1.close()
sms_code = pytesseract.image_to_string(Image.open("picture.jpg"))
print("-------------图形验证码-------------")
print(sms_code)

3. 数据库操作pymysql&将元组转换为字符串:

pymysql的使用方法,详见https://www.cnblogs.com/wt11/p/6141225.html

import pymysql
conn = pymysql.connect(host="xxx", port=xxx, user="root", passwd="xxx", db="xxx" ,charset="utf8")
cursor = conn.cursor()
eff_row = cursor.execute("SELECT a.content FROM xxx.xxx a WHERE a.mobile = %s ORDER BY a.create_time DESC LIMIT 1",(mobile))
rows = cursor.fetchone()
print(rows[0])
#将元组转换为字符串并截取第4到8位
rowone = "".join(rows)[4:8]
print("-------------注册短信验证码-------------")
print(rowone)
conn.connect()
cursor.close()
conn.close()

4. unittest的使用方法:

unittest的使用方法详见:https://www.cnblogs.com/111testing/p/6477005.html

                self.assertEqual(code, 0)

def casesuite():
    suite = unittest.TestSuite()
    suite.addTest(RegisterCase("Register"))
    runner = unittest.TextTestRunner()
    runner.run(suite)
if __name__ == "__main__":
    casesuite()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值