当爬虫在模拟登录的时候,主流采用2种手法,模拟浏览器操作和协议破解。都会遇到的问题是,验证码的答案即使是通CNN或者OCR或者打码平台获得,如何提交呢?恐怕不少同学会说,提交还用说?
因为验证码的图片,往往再次请求会是不同的图片,如何将验证码与当前登录流程绑定呢?
目前主流有3种方法
一:采用模拟浏览器登录;
1:最直观的解决思路,截图打码提交
加载完毕网页后,单独截取当前网页的截图,明知验证码位置,截图该验证码位置image模块可以解决,提交打码平台或者各种模块识别后,填写。
优点自然是直观,缺点就是模拟登录比较慢,截图也繁琐
2:采用cookie获取验证码图
获取当前网页的cookie,携带cookie再次请求验证码图片采用requests模块,类似刷新下一张验证码,这时候,虽网页中的验证码图片没有变化,但是服务器端已经认为这个cookie对应的访客使用下一个验证码图片了,这样节省了一个截图的过程。
二:采用协议破解
所谓协议破解指通过理解他js发出登录请求的详细参数,伪造这些参数去完成登录,只需要requests之类请求发出,因此速度可以非常快,这样一来,如何标志前后请求是同一个访客发出的呢?有的网站给初始init页面一个唯一token,让后续请求都带同一个token就是同一个访客,也有用cookie来标志前后请求。
1:cookie标记,将请求index首页的cookie保存,带着cookie去请求验证码图片,再将带着cookie的答案连同登录参数一起发出。
2:绕过首页cookie,有时候也是可以的,比如12306.只用cookie直接取验证码就可以了,不用拿首页cookie
3:通过会话session,这样的请求会自动连接前后的cookie
原创文章,转载请注明: 转载自URl-team
本文链接地址: 解决爬虫模拟登录时验证码图片拉取提交问题的两种方式