最新 详解如何模拟登录知乎 英文验证码以及中文倒立字(继上篇scrapy分析知乎( 二 )

用户界面,每次打码都会消耗积分
进入开发者中心,下载最新云打码接口
下好之后,记得改好文件;如下
现在来仔细看英文验证码:从图中可以明显看出是加密,且有一段是多余的,除此之外有个坑还~仔细看有个%0A也是多余的
所以我们先解码
if english_captcha_element:#这里解码同中文倒立字#取srcbase64_text = english_captcha_element.get_attribute("src")import base64#打上断点来debug看看code是什么 #替换code = base64_text.replace("data:image/jpg;base64,","").replace("%0A","")#print(code) f = open("yzm_en.jpeg", "wb")f.write(base64.b64decode(code))f.close()
多达75次的%0A
接下来就是调用云打码平台提供的api,下面的账号密码是注册的用户的账号密码~
验证码code 如果为空,就继续打码
#采用云解码提供的API 在线打码#导入之前云打码下载的那个包from douban.tools.yundama_requests import YDMHttp#username passwd appID appKeyyundama=YDMHttp("username","passwd",'appid','appkey')#图片名 及 打码方式code=yundama.decode("yzm_en.jpeg",5000,60)#判断是否成功while True:if code == "":code = yundama.decode("yzm_en.jpeg",5000,60)else:break#成功后自动输入验证码;同样send_keys传入验证码值~browser.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div[1]/div/form/div[4]/div/div/label/input').send_keys(code)
如下可以看到已经识别成功了~~~
然后就直接登录成功了~~
接下来讲关于中文验证码的识别:
ps:关于中文验证码的识别,有些还不太够详细甚至有点草率,后面完成互联网+ 项目后,找时间进行完善 。
首先是在上 "zhiye" 大佬
后,cp到当前工程目录下
现需要安装依赖包

最新 详解如何模拟登录知乎 英文验证码以及中文倒立字(继上篇scrapy分析知乎

文章插图
除了注释以外的,都需要;
如果有些加了 豆瓣源依旧无法下载成功,那么到链接下载,然后离线安装whl 。安装中,有什么问题可以在下方留言 。
对于如何调用,在“zheye”下方就可以看到;
通过使用方法,我们用自带的a.gif做测试
"[(50.667, 39.), (47., 278.3)]"虽然坐标是这样的,但其实实际上并不是
我们进入zheye的在线测试地址:;同样的我们提交a.gif
打开json文件,可以看到,坐标是这样的,(关于两个字的先后顺序,不重要,只要是准确的就可以)
实际上首先坐标是有点问题的,看上图可以明显看出,第二个字的x坐标更大,y坐标更小,但是显示却是颠倒的,所以需要进行坐标的调换,除此之外,知乎倒立字为1-2个;所以作出以下判断
from zheye import zheyez = zheye()positions = z.Recognize('D:/Pythonstudy/douban/douban/spiders/zhihu_image/a.gif')last_position = []#只有两种情况 一个倒立字 和 两个倒立字#两个倒立字时if len(positions) == 2:#进行坐标的调整 直接复制即可 ,因为 默认是有问题的if positions[0][1] > positions[1][1]:last_position.append([positions[1][1], positions[1][0]])last_position.append([positions[0][1], positions[0][0]])else:last_position.append([positions[0][1], positions[0][0]])last_position.append([positions[1][1], positions[1][0]])#print(last_position)#一个倒立字时else:last_position.append([positions[0][1], positions[0][0]])
得到正确的坐标,应该是这样的
坐标确立之后,接下来的任务就简单了 。
进行move,以及click 。但是实际上知乎的倒立字,单独打开和页面上的大小不一致;如图
所以做如下变化,关于代码这里还有个坑,同时做实验时,需要把下方的下载任务关掉,否则坐标点击错误 。且需要关注;