这篇博客本来是想写使用拉勾模拟登录获取cookie的,可是当我研究完滑块验证码并且有了思路后,发现使用selenium登录时的验证码是这样的:
我能怎么办,我也很无奈啊。拉勾有js判断当前浏览器是否是selenium,是直接调用极验的接口,有一个单独的js文件判断,文件可能是sense-版本.js(猜测大概率是),版本我忘了。但是奈何本人没有怎么学习过js,无法看懂极验识别selenium的js代码。我也试过使用Charles截获这个js文件,但这个js文件还包含登录信息,没有就登录不了。
当然网上的方法我也尝试了,看了一些文章。selenium在启动的时候会创建一个代理服务器,并且会有一些不同于浏览器的参数。一般的网站会判断这些参数,高级一点的则是人机判断,比如鼠标轨迹等。极验的js代码里并没有出现这些参数,可能是通过拼接的。另外,自己操作也会出现这样的验证码,所以不是人机判断。
好像有点说远了,说回正体,上面那个验证码该怎么破呢?这样的验证码初步思路是先OCR识别文字,再识别9张图,比对一下看看符不符合。OCR好说,但图像识别需要深度学习的知识,可是我也不会啊,怎么办呢。很多平台都提供了开放的AI功能,就是你注册实名就能使用他们的产品,比如OCR、图像识别、语音识别等。不过,验证码提供的图片一般会很模糊,文字也会做一些特殊的处理,所以实际的成功率会很低。这可能需要单独的训练某个模型去针对才能提高成功率吧。
(http://ai.baidu.com/)
首先登录(没有百度账号就过分了),可以在产品服务看到所有开放的功能,点右上角的控制台。我们先试一下图像识别,点图像识别创建应用,填写信息(随便写,正常一点就行)。之后就可以在管理应用里看到刚才创建的应用信息,比如APPID等。调接口时会用到。
怎么使用有详细的技术文档和SDK,我来简单说一下图像识别的SDK开发文档。
pip install baidu-aip 安装百度AI库
from aip import AipImageClassify
# 在管理应用里可以看到这三个参数
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
# 建立连接
client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY)
# 读取图片
with open('example.jpg', 'rb') as fp:
image = fp.read()
# 调用通用物体识别
client.advancedGeneral(image);
# 如果有可选参数
options = {}
options["baike_num"] = 5 # 结果会返回5个值,这个数字表示是否使用百度百科api查询这五个值,默认0,你也可以填5
# 带参数调用通用物体识别
print(client.advancedGeneral(image, options))
返回值如下:
未加baike_num时
{
'log_id': 6023433747904984067,
'result_num': 5,
'result': [{
'score': 0.667241,
'root': '商品-电脑办公',
'keyword': '光电鼠'
}, {
'score': 0.522877,
'root': '商品-鞋子',
'keyword': '皮鞋'
}, {
'score': 0.359822,
'root': '动物-软体类',
'keyword': '紫贻贝'
}, {
'score': 0.208572,
'root': '动物-软体动物',
'keyword': '贻贝'
}, {
'score': 0.0666,
'root': '动物-哺乳动物',
'keyword': '虎鲸'
}]
}
加了时:
{
'log_id': 172541598469009731,
'result_num': 5,
'result': [{
'score': 0.514441,
'root': '商品-绘画',
'baike_info': {
'baike_url': 'http://baike.baidu.com/item/%E5%B7%A5%E7%AC%94%E7%94%BB/333648',
'image_url': 'http://imgsrc.baidu.com/baike/pic/item/0b46f21fbe096b63b35e90580a338744ebf8ac77.jpg',
'description': '工笔画,亦称“细笔画”,属中国画技法类别的一种。工笔画与“写意画”对称。工笔画属于工整细致一类画法,如宋代的院体画,明代仇英的人物画等。工笔画要求“有巧密而精细者”(北宋韩拙《山水纯全集》),水墨、浅绛、青绿、金碧、界画等艺术形式均可表现工笔画。'
},
'keyword': '工笔画'
}, {
'score': 0.37045,
'root': '非自然图像-彩色动漫',
'baike_info': {},
'keyword': '卡通动漫人物'
}, {
'score': 0.241511,
'root': '商品-绘画',
'baike_info': {
'baike_url': 'http://baike.baidu.com/item/%E5%9B%BE%E7%94%BB/3357821',
'image_url': 'http://imgsrc.baidu.com/baike/pic/item/a8773912b31bb05191a21521387adab44aede031.jpg',
'description': '图画,拼音:tú huà释义:1、绘画。2.用线条、色彩构成的形象或肖像。3.地图。4.比喻壮丽的河山。5.谋划。'
},
'keyword': '图画'
}, {
'score': 0.117876,
'root': '非自然图像-书籍封面',
'baike_info': {
'baike_url': 'http://baike.baidu.com/item/%E4%B9%A6%E7%B1%8D/59503',
'image_url': 'http://imgsrc.baidu.com/baike/pic/item/0b46f21fbe096b63a940b6e806338744ebf8ac29.jpg',
'description': '书籍,是指装订成册的图书和文字,在狭义上的理解是带有文字,图像的纸张的集合。广义的书则是一切传播信息的媒体。不过有些人认为图书一词是“河图”与“洛书”的简称。'
},
'keyword': '书籍'
}, {
'score': 0.001983,
'root': '人物-人物特写',
'baike_info': {
'baike_url': 'http://baike.baidu.com/item/%E7%BE%8E%E5%A5%B3/109596',
'image_url': 'http://imgsrc.baidu.com/baike/pic/item/91529822720e0cf3acdfc0280046f21fbe09aa3d.jpg',
'description': '美女是一个汉语词汇,拼音是měi nǚ,指容貌姣好、仪态优雅的女子。中国古代关于美女的形容词和诗词歌赋众多,形成了丰富的美学资料。《墨子·公孟》:“譬若美女,处而不出,人争求之。”'
},
'keyword': '美女'
}]
}
可以看出,使用百度百科对验证码识别并没有意义,他查询的是识别的关键字。
上面是SDK(开发文档,专为程序员设置的接口)的使用,还有一种方法调用,就是直接调用API,python就可以使用requests发送POST请求来获取结果。在技术文档里有详细的说明,我就不一一列举了。
我们再看看OCR文字识别的代码:
# -*- coding: utf-8 -*-
from aip import AipOcr
APP_ID = ‘’
API_KEY = ‘’
SECRET_KEY = ‘’
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
# 读取图片
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
image = get_file_content('info2.png')
#调用通用文字识别, 图片参数为本地图片
#client.basicGeneral(image)
""" 如果有可选参数 """
options = {}
#options["language_type"] = "CHN_ENG"
#options["detect_direction"] = "true"
#options["detect_language"] = "true"
#options["probability"] = "true"
""" 带参数调用通用文字识别, 图片参数为本地图片 """
result = client.basicGeneral(image, options)
print(result)
我试了一下,对于正经的字体,基本能识别成功,但对于拉勾这样将文字倾斜了一点角度的字体,大部分都识别不出来,暂时不去研究。只是玩玩各大平台的功能。
还有一些比较有意思的功能,比如语音识别、人脸对比、文本纠错、情感倾向分析、文章分类等。有兴趣的可以试试,只要注册登录就可以免费使用,为什么不呢?虽然有调用次数限制,但对于我们来说,绝对用不完。
(https://ai.qq.com/)
以下的所有平台都不贴代码,只说一下使用的感受。
图像识别