1、base64图片编码解码
# -*- coding: utf-8 -*-
from base64 import urlsafe_b64decode, b64encode
import hashlib
import re
get_md5 = lambda x: hashlib.md5(x).hexdigest()
def decode_image(src):
result = re.search("data:image/(?P<ext>.*?);base64,(?P<data>.*)", src, re.DOTALL)
if result:
ext = result.groupdict().get("ext")
data = result.groupdict().get("data")
else:
raise Exception("Do not parse!")
img = urlsafe_b64decode(data)
filename = "{}.{}".format(get_md5(img), ext)
with open(filename, "wb") as f:
f.write(img)
return filename
def encode_image(filename):
ext = filename.split(".")[-1]
with open(filename, "rb") as f:
img = f.read()
data = b64encode(img).decode()
src = "data:image/{ext};base64,{data}".format(ext=ext, data=data)
return src
if __name__ == '__main__':
# https://aiqicha.baidu.com/detail/compinfo?pid=xlTM-TogKuTwpZhM*DDv0PHnObnM4KYl8wmd&rq=es&pd=ee&from=ps
# encode
src_str = encode_image("d74095502fdfe54bc205f3f64767a59d.png")
print(src_str)
# decode
src_str = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANgAAAAkCAMAAADcrgS9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAABLUExURQAAAPDw8IuLi/f39+3t7VpaWvv7+9DQ0Nzc3Hd3dzMzM+Tk5JmZmenp6b29vbKysv7+/tbW1qmpqcXFxfT09EdwTAAAAAAAAP///9cXrAQAAAAYdFJOUzPOWeDFRu6Ro1E8sWG8fHH4mmuE1wAiBhFeie8AAASDSURBVFjD7VnZduMgDMXGYLOYxWZa/f+XjgR4d5J2HuYhJ7enSUxlxBXSFW7Yn+8v9nb4+v7Dvtlb4pt9vSexN6X1wQcf/H/4KA7XGn+VUxe7dtK7K7FcefEDH+o6HbNOH6/xUhz8iunmNkaO1STqyxOMMBzWAJyxHvqLXQft4a6oEWwCrgj6mYsJmsvYDJD2C9NBavRrdkN5FbariJUt2Q3gGIswPwijy4ggy4cSQQPxB8QsFNimfpgYc+EAvru3ob8f0IMcgYv9QMcYB3sm5kEmBKc/l8GRvSDm4ARauArQjCOHNBKGkhEZCebygYYkjAmSMQPwKMHEiEnj5QGJ8nQoQA71U6USIbS463zLNYmcJoCxQmzEhpJI3Wb3gtgMTX8ATib4gWoqMTpA5iGD5KRgCdfnFp9XGLgLHtMGwpSTQE5rlBva2J1dT6EbLe4YJ1QnZGctFoK1BgZr73dsOA/pBB1VzAAxV44oxBqKNQdDb5kYzt22MdrW9m3bGqceEGs9YgbuV1C6OwmyXYib7ANTwOGGSQ+pzdDImuA8JYYxYyGW7U5RvtmxC7E2dHrN7kOqrzVW5hLHfeBPJfG4owpXLCdVgMyky5OD1RxmtcmMwPAOSmMqkkq1ZZIR7ZgxHBpjEr4MP9wxMStBiBBFgb4npkvFJBjx1Twn1lK5b0khIcQtJB3m/pyz3WK9MrXXz1pji2WR0iwvr2rsQoxfasLdE6sYwOftq8TEDpv++1U58jxDo9i4wrOeax0AU4zWrACypLpKTDAVKxy1BJA/IhYvPa05Y8oCS80gQaS3Sixl/3UZC7F9ROIu8IeMvXQ8HOBzhzsWKW1Dlgpfbkxh2rQNaUiye0nsrlnd211UkWkIRFsCz/RrW91HZN5JY28JUxFZvLndIeuOYmXB+1QUc8JQmINjS3aCSrOvCnd3MLhl3B4awNISZwSHSG9VFcsCSiq+gITSvMRCbNrHqVna/5kYlYXBcxOGJIGnyFS7YX97f9tk/F1+7lGHrjWGEk4ijN3FZLjHvOzCRyzqiFtHkjNk3TkTK3KPoRiMIccRaJvEdv6xbhz3NXpFA+qO2Lj2nAAP5f7ceYdnZ1G3yP64EFvNxYVYwbw67oDylI4yerNTdILxzYMDagD9XFHkY2J5KySksuk3MrTXxFX2zQ+IyZwB0+o44DGzg4RVuyPWkMPxwYmnXVLk34hhAQdfa+yhPqEXuZ6d3TL1U2KnPoZNgItjKuZCQJbY0G8TJd4O1+LJWFPxoora41EhKRIP3XRdIG+mOwMHlVzLW69HfDw6NQl/6OUFMWznc5AYHCKiq50NZaY23GoXvzxKPBCPvh5DCzIxtOKuqiKql6QQpUtz97RfJXoutwb2G1XseYA5Yvp6uT0akR0GK67PPjfPmp7fd22jFhxTsaKKh19PHlqXUlXtGRofFmpWKBlCp9hvUhGfgjqt6GFU+2jGsevqjoluPaI1t534VlP07iwkXj716+dPzr/wIcpMWr3wme315x86H3zwwef7lpe03vaLv3f9qvYvITlsoA7ETwUAAAAASUVORK5CYII='
print(decode_image(src_str))
2、爬虫遭遇StackPath反爬的应对之策
3、JS逆向之某货车公共平台模拟免登陆
import execjs
with open('qiche.js') as rr:
js_str = rr.read()
pwd = input(f'请输入密码')
password = execjs.compile(js_str).call('h_encrypt', pwd)
print(password)
4、python图片验证码识别muggle-ocr
pip install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com muggle-ocr
5、结合起来 我想成为胖子
import requests
import time
import muggle_ocr
import execjs
cookies = {
'zg_did': '%7B%22did%22%3A%20%22182d071c408102b-081486549b68b6-26021b51-1fa400-182d071c40913d9%22%7D',
'JSESSIONID': 'B71C458CC1AEA72A904B98F7E5661507',
'RandomCheckCode_PSS': 'a039a8b1-8f7f-4e99-9f57-c20462f0d4f4',
'zg_8eef6a6900324a39bb3b203913a53cf5': '%7B%22sid%22%3A%201661362486021%2C%22updated%22%3A%201661362559304%2C%22info%22%3A%201661354492940%2C%22superProperty%22%3A%20%22%7B%7D%22%2C%22platform%22%3A%20%22%7B%7D%22%2C%22utm%22%3A%20%22%7B%7D%22%2C%22referrerDomain%22%3A%20%22%22%2C%22zs%22%3A%200%2C%22sc%22%3A%200%2C%22firstScreen%22%3A%201661362486021%7D',
}
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Referer': 'https://www.gghypt.net/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
}
opLoginname = '123456'
opPass = '123456'
tt = int(round(time.time() * 1000))
with open('qiche.js') as rr:
js_str = rr.read()
opPass = execjs.compile(js_str).call('h_encrypt', opPass)
print(f'opPass:{opPass}')
img_code_url = f'https://www.gghypt.net/sysbasic/rondamImage.action?requestParam.equal.randomType=index&d{tt}'
response = requests.get(img_code_url, headers=headers)
# with open('img_code.png', 'wb') as wb:
# wb.write(response.content)
captcha_bytes = response.content
sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.Captcha)
for i in range(5):
st = time.time()
img_code = sdk.predict(image_bytes=captcha_bytes)
print(img_code, time.time() - st)
form_data = {
'requestParam.equal.opLoginname': opLoginname,
'requestParam.equal.opPass': opPass,
'imgCode': img_code
}
print(f'form_data:{form_data}')
# post_url = f'https://www.gghypt.net/sysbasic/loginPub.action?userName={opLoginname}d{tt}'
# print(f'post_url:{post_url}')
# # response = requests.post(post_url, headers=headers, cookies=cookies, data=data)
# response = requests.post(post_url, headers=headers, data=data)
# print(response.text)
# print(response.status_code)
网友评论