使用Python和打码平台识别百度登录验证码

2019年7月29日 | 标签:

因为需要去百度后台去取一些报告数据(有的百度产品是没有提供API接口)所有需要模拟cookie去后台下载数据,但是百度的cookie是有15分钟的有效期,所以要么挂一个线程每15分钟用这个cookie去百度那边续命下(目前是用google sheets的脚本加定时器这么弄)但是 还有一个问题无法解决,如果有人登录了这个账号后再注销 这个cookie也会作废,所以使用cookie不是万全之策 除非单独出一个不会有人登录的账户 那这个账号的cookie就可以长期稳定的取数

 

还有一种方法就是模拟登录,拿到新鲜cookie

但是百度和其他搜索引擎的广告后台都是有验证码 无法直接登录

所以第一步就是验证码识别

试过了几个平台 还是觉得 有个平台的验证率最高 因为是人工识别 百度自己的 大数据识别 不准。。

而且打码的价格很低,1块钱可以识别1000个验证码。。足够用了

真没必要去弄机器学习识别验证码

下面是过程

http://www.chaojiying.com/api-14.html

下载python案例文件

有几个错误地方要小心 需要是python3  这个例子是python2 print这边需要加括号

然后缩进要注意点

其他还好

然后把下面几行换成

if __name__ == ‘__main__’:
jpg_link = “https://cas.baidu.com/?action=image2&appid=3″
path=”5566.jpg”
request.urlretrieve(jpg_link, path)
chaojiying = Chaojiying_Client(‘账号’, ‘密码’, ‘后台id’) #用户中心>>软件ID 生成一个替换 96001
im = open(path, ‘rb’).read()
print(chaojiying.PostPic(im, 1902)[“pic_str”])

 

即可 如下图所示


 

 

 

 

 

是不是很方便

提供下全文代码吧

#!/usr/bin/env python
# coding:utf-8
import requests
from urllib import request
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__’:
jpg_link = “https://cas.baidu.com/?action=image2&appid=3″
path=”5566.jpg”
request.urlretrieve(jpg_link, path)
chaojiying = Chaojiying_Client(‘我的账号’, ‘我的密码’, ‘900784’) #用户中心>>
im = open(path, ‘rb’).read() #本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
print(chaojiying.PostPic(im, 1902)[“pic_str”])
目前还没有任何评论.