用ddddocr识别图形字符验证码
函数很简单,这里主要分享流程目标这是一个网站 的注册页面找接口先在抓包工具或者浏览器检查界面找到验证码的位置测试测试下重放,发现数据可以正常发送,那就拷贝headers里面的一些参数和cookie到Postman做测试逐步添加headers信息直到能拿到数据组合带带弟弟编码拷贝python-requests代码到编译器,修改下即可为什么是带带弟弟,因为他就叫这个名字get_time_stamp13
·
函数很简单,这里主要分享流程
目标
这是一个网站 的注册页面
找接口
先在抓包工具或者浏览器检查界面找到验证码的位置
测试
测试下重放,发现数据可以正常发送,那就拷贝headers里面的一些参数和cookie到Postman做测试
逐步添加headers信息直到能拿到数据
组合带带弟弟编码
拷贝python-requests代码到编译器,修改下即可
为什么是带带弟弟,因为他就叫这个名字
get_time_stamp13函数用于生成13位时间戳,作为文件名,文件会保存到本地进行比较
ddddocr的用法很简单,生成类的实例之后可以直接用,读取的是二进制数据,但是要注意这个包的安装必须装到主环境,虚拟环境安装会出错
with open(filename,'wb') as f:
f.write(response.content)
ocr=ddddocr.DdddOcr()
decode_1=ocr.classification(response.content)
requests的url可以将url的https改为http,可以解决连接错误。
from datetime import datetime
import re
import time
import ddddocr
import requests
def get_time_stamp13():
t=datetime.now()
n3=str(t)[-6:-3]
datetime_str = datetime.strftime(datetime.now(), '%Y-%m-%d %H:%M:%S')
datetime_obj = datetime.strptime(datetime_str, '%Y-%m-%d %H:%M:%S')
# 10位,时间点相当于从1.1开始的当年时间编号
date_stamp = str(int(time.mktime(datetime_obj.timetuple())))
# 3位,微秒
date_stamp = date_stamp + n3
return int(date_stamp)
def readimage():
ocr=ddddocr.DdddOcr()
res=requests.get()
ocr.classification(res.content)
import requests
url = "http://passport.tuniu.com/ajax/captcha/v/1447825328.4607"
payload={}
headers = {
'Cookie': 'tuniu_partner=MTU1OCwwLCw2ZGYxN2I2Y2Q1NDQxMzk4OGU1OTllYzE0NzQzNjlhZA%3D%3D; tuniuuser_citycode=MTYxMQ%3D%3D; p_phone_400=4007-999-999; p_phone_level=0; p_global_phone=%2B0086-25-8685-9999; _tacau=MCwzOGRjOGU0NC1hNjZlLTJiODctODRiZC0yOWJkMzBmMDY1ZGQs; udid=tn-100-1635931987040-0d25a6f1-3c89-11ec-b13c-a11f56f54905; _tact=NzUzOGJiOGQtZDMyNS04YjE3LTU2M2ItMmI1NmU1ZGY2NmM0; _tacz2=taccsr%3Dbaidu%7Ctacccn%3D%28cpc%29%7Ctaccmd%3DSE%7Ctaccct%3D%28none%29%7Ctaccrt%3D%28none%29; _taca=1635931985752.1635931985752.1635931985752.1; _tacb=ZDQwMThjYTItZGQ0OC03ZWQwLTYyZjEtYThkNGE2NzZiMWZm; _tacc=1; PageSwitch=1%2C213612736; _pzfxuvpc=1635931987031%7C4911940592134903408%7C1%7C1635931987038%7C1%7C%7C9096756265259129179; _pzfxsfc=u10316631.k217654437386.a45692303164.pb; _ga=GA1.2.1140816901.1635931987; _gid=GA1.2.227309581.1635931987; Hm_lvt_fe3fbe4228e14b1544525f058df92f91=1635931987; Hm_lpvt_fe3fbe4228e14b1544525f058df92f91=1635931987; OLBSESSID=qv6rqvguelg9jpe5pof87cabn7; PcHomeVisit=1; smidV2=202111031733099a86aac40b61c24bf383873ee97d86ca006e90c6558c92510; MOBILE_APP_SETTING_OPEN-154=1; acw_tc=2f624a4316359319997322452e655bb2fde9fcef4deb18f95221f62773e160; PASSPORTSESSID=84d706599d4fca2731ebbd62df9eebae; tuniu-assist={%22show%22:false%2C%22audio%22:false%2C%22speed%22:%22middle%22%2C%22zomm%22:1%2C%22cursor%22:false%2C%22pointer%22:false%2C%22bigtext%22:false%2C%22overead%22:false%2C%22bgcolor%22:false}; _uab_collina=163593199983111888803387; fp_ver=4.7.3; BSFIT_EXPIRATION=1637216066128; BSFIT_OkLJUJ=FHMohPnE-rBR2cxk5jzg-YgPjJrYrLan; BSFIT_DEVICEID=HXbehRnlOkhIHzzo4pE4Mvu9g71_5oAA3aRMpu1IQLZ7EKVSLjgOHe8N9LzewBS-FGAxhH684Fj-c0xfjHKuw84BkZ82bilae-hKd8cUpgBLHGjusXR_NmvBdN33AkzTOYGtRhNmd6FVUYQQgmIePfwyXMUB7XOJ; MOBILE_APP_SETTING_STATE-154=CLOSE; ssxmod_itna=mq0xnCyD9DzOG780P7Ki=w3iIMKDuv2cnK2eDsimDSxGKidDqxBWqQRHq7y5x0=AUlERm3dFGSy44fBCxc+dxVGbyIKDU4i8DCwuwKD4+KGwD0eG+DD4DWDmWHDnxAQDjcKGWDbO=DmDGAc3qDgDYQDGup6D7QDIk=q4gwcDCd4EwrgfDiYG7=DjurD/S+rEerb=ZwZiEQDzMaDtutSFdtKx0p1QDp=QAhLtOqaK0DwXB44fD7Y4g4qm8O57tS=GB84Yr4jmBqDGROoDU4xD; ssxmod_itna2=mq0xnCyD9DzOG780P7Ki=w3iIMKDuv2cnKxikviDyiQD05x2K03KaLnkaisXD6mq4=YKD4g+t+iDRwFP+aDUO7bFT=ikx2a557wB4GkLrx79Neonm7Bunbk/yiS1vy/SZndUl3UU//uqVW344LR5ZnrfVKgi6lgXtzCxwbkXU8C0dw+EV38w550u9KDKP=YWoqZv8+wch3Tjsb3Ll/R3M9hYON8Yhjw48j89kWwLwYGABIaBzWkfnD/6zEPXOVRFMRodiGZLRSMv30c62dNXqF4g2TSdg9Yd6N4fgvqffhftGjRCUcgqu4sl+sN2CNk8xrd5CYXutc+1cw1Oh7lkY6bOYAYCBPaiOV7xp2YwGKxoHX0Dsg5eGt+E5kOtd7dHOPfe4k78BjmKGOXD4iEauqATqAuntD=HLgzpmPS0YLjKVDCPrqbrvkB1bg4E2eemvNrOPgPHDsm25diYXkmujQ1hmtQKGhPQOYEophfUqT3g1L/et5lXylECisXuPQSX0Y=yOP9xIRb3ugwYhYvRDOOC9bEaDIHK8wqAmwY+kH7eG5o5wwLsBeD7QTj+/GiNkGa0a4eks/d8X+RlTs3=zHqqYT1Twa0kZZxYDGcDG7rR91Gx/eediDD=; PASSPORTSESSID=vlhu3brl4qqfkm1gip2enh1np0; acw_tc=2f624a3816359329976566427e1b7363f6a399a1c74d301ce47383a4c22a08',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
'sec-fetch-dest': 'image',
'sec-fetch-mode': 'no-cors',
'sec-fetch-site': 'same-origin',
'referer': 'https://passport.tuniu.com/register'
}
response = requests.request("GET", url, headers=headers, data=payload)
filename='code/'+str(get_time_stamp13())+'.jpg'
with open(filename,'wb') as f:
f.write(response.content)
ocr=ddddocr.DdddOcr()
decode_1=ocr.classification(response.content)
print(decode_1)
改用postman里面的另外一个Python-http.client的代码即可正常访问ssl连接
from datetime import datetime
import re
import time
import ddddocr
import requests
def get_time_stamp13():
t=datetime.now()
n3=str(t)[-6:-3]
datetime_str = datetime.strftime(datetime.now(), '%Y-%m-%d %H:%M:%S')
datetime_obj = datetime.strptime(datetime_str, '%Y-%m-%d %H:%M:%S')
# 10位,时间点相当于从1.1开始的当年时间编号
date_stamp = str(int(time.mktime(datetime_obj.timetuple())))
# 3位,微秒
date_stamp = date_stamp + n3
return int(date_stamp)
def readimage():
ocr=ddddocr.DdddOcr()
res=requests.get()
ocr.classification(res.content)
import http.client
conn = http.client.HTTPSConnection("passport.tuniu.com")
payload = ''
headers = {
'Cookie': 'tuniu_partner=MTU1OCwwLCw2ZGYxN2I2Y2Q1NDQxMzk4OGU1OTllYzE0NzQzNjlhZA%3D%3D; tuniuuser_citycode=MTYxMQ%3D%3D; p_phone_400=4007-999-999; p_phone_level=0; p_global_phone=%2B0086-25-8685-9999; _tacau=MCwzOGRjOGU0NC1hNjZlLTJiODctODRiZC0yOWJkMzBmMDY1ZGQs; udid=tn-100-1635931987040-0d25a6f1-3c89-11ec-b13c-a11f56f54905; _tact=NzUzOGJiOGQtZDMyNS04YjE3LTU2M2ItMmI1NmU1ZGY2NmM0; _tacz2=taccsr%3Dbaidu%7Ctacccn%3D%28cpc%29%7Ctaccmd%3DSE%7Ctaccct%3D%28none%29%7Ctaccrt%3D%28none%29; _taca=1635931985752.1635931985752.1635931985752.1; _tacb=ZDQwMThjYTItZGQ0OC03ZWQwLTYyZjEtYThkNGE2NzZiMWZm; _tacc=1; PageSwitch=1%2C213612736; _pzfxuvpc=1635931987031%7C4911940592134903408%7C1%7C1635931987038%7C1%7C%7C9096756265259129179; _pzfxsfc=u10316631.k217654437386.a45692303164.pb; _ga=GA1.2.1140816901.1635931987; _gid=GA1.2.227309581.1635931987; Hm_lvt_fe3fbe4228e14b1544525f058df92f91=1635931987; Hm_lpvt_fe3fbe4228e14b1544525f058df92f91=1635931987; OLBSESSID=qv6rqvguelg9jpe5pof87cabn7; PcHomeVisit=1; smidV2=202111031733099a86aac40b61c24bf383873ee97d86ca006e90c6558c92510; MOBILE_APP_SETTING_OPEN-154=1; acw_tc=2f624a4316359319997322452e655bb2fde9fcef4deb18f95221f62773e160; PASSPORTSESSID=84d706599d4fca2731ebbd62df9eebae; tuniu-assist={%22show%22:false%2C%22audio%22:false%2C%22speed%22:%22middle%22%2C%22zomm%22:1%2C%22cursor%22:false%2C%22pointer%22:false%2C%22bigtext%22:false%2C%22overead%22:false%2C%22bgcolor%22:false}; _uab_collina=163593199983111888803387; fp_ver=4.7.3; BSFIT_EXPIRATION=1637216066128; BSFIT_OkLJUJ=FHMohPnE-rBR2cxk5jzg-YgPjJrYrLan; BSFIT_DEVICEID=HXbehRnlOkhIHzzo4pE4Mvu9g71_5oAA3aRMpu1IQLZ7EKVSLjgOHe8N9LzewBS-FGAxhH684Fj-c0xfjHKuw84BkZ82bilae-hKd8cUpgBLHGjusXR_NmvBdN33AkzTOYGtRhNmd6FVUYQQgmIePfwyXMUB7XOJ; MOBILE_APP_SETTING_STATE-154=CLOSE; ssxmod_itna=mq0xnCyD9DzOG780P7Ki=w3iIMKDuv2cnK2eDsimDSxGKidDqxBWqQRHq7y5x0=AUlERm3dFGSy44fBCxc+dxVGbyIKDU4i8DCwuwKD4+KGwD0eG+DD4DWDmWHDnxAQDjcKGWDbO=DmDGAc3qDgDYQDGup6D7QDIk=q4gwcDCd4EwrgfDiYG7=DjurD/S+rEerb=ZwZiEQDzMaDtutSFdtKx0p1QDp=QAhLtOqaK0DwXB44fD7Y4g4qm8O57tS=GB84Yr4jmBqDGROoDU4xD; ssxmod_itna2=mq0xnCyD9DzOG780P7Ki=w3iIMKDuv2cnKxikviDyiQD05x2K03KaLnkaisXD6mq4=YKD4g+t+iDRwFP+aDUO7bFT=ikx2a557wB4GkLrx79Neonm7Bunbk/yiS1vy/SZndUl3UU//uqVW344LR5ZnrfVKgi6lgXtzCxwbkXU8C0dw+EV38w550u9KDKP=YWoqZv8+wch3Tjsb3Ll/R3M9hYON8Yhjw48j89kWwLwYGABIaBzWkfnD/6zEPXOVRFMRodiGZLRSMv30c62dNXqF4g2TSdg9Yd6N4fgvqffhftGjRCUcgqu4sl+sN2CNk8xrd5CYXutc+1cw1Oh7lkY6bOYAYCBPaiOV7xp2YwGKxoHX0Dsg5eGt+E5kOtd7dHOPfe4k78BjmKGOXD4iEauqATqAuntD=HLgzpmPS0YLjKVDCPrqbrvkB1bg4E2eemvNrOPgPHDsm25diYXkmujQ1hmtQKGhPQOYEophfUqT3g1L/et5lXylECisXuPQSX0Y=yOP9xIRb3ugwYhYvRDOOC9bEaDIHK8wqAmwY+kH7eG5o5wwLsBeD7QTj+/GiNkGa0a4eks/d8X+RlTs3=zHqqYT1Twa0kZZxYDGcDG7rR91Gx/eediDD=; PASSPORTSESSID=vlhu3brl4qqfkm1gip2enh1np0; acw_tc=2f624a3816359329976566427e1b7363f6a399a1c74d301ce47383a4c22a08',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
'sec-fetch-dest': 'image',
'sec-fetch-mode': 'no-cors',
'sec-fetch-site': 'same-origin',
'referer': 'https://passport.tuniu.com/register'
}
conn.request("GET", "/ajax/captcha/v/1447825328.4607", payload, headers)
res = conn.getresponse()
data = res.read()
# print(data.decode("utf-8"))
filename='code/'+str(get_time_stamp13())+'.jpg'
with open(filename,'wb') as f:
f.write(data)
ocr=ddddocr.DdddOcr()
decode_1=ocr.classification(data)
print(decode_1)
更多推荐
所有评论(0)