python selenium 获取图片验证码
问题描述
我想缓存图片验证码到本地,然后让用户通过web服务看到图片手动打码登录。由于考虑到正式运行是无界面的,所以无法使用selenium的截屏。除了selenium截屏和右键方式,还有没有其他的办法?
目前想到了用js将验证码重新请求到放入canvas中再toDataURL成png的base64码输出到Dom再用selenium获取。下面的代码测试用的是移动商城的登录入口验证码。
$(’body’).append(’<canvas id='CAVASIMG'></canvas>’);var img=new Image();img.src='http://shop.10086.cn/i/authImg';var d=document.getElementById('CAVASIMG');var cxt=d.getContext('2d');img.onload = function(){ d.width = img.width;d.height = img.height; cxt.drawImage(img,0,0); console.log(d.toDataURL(’png’));};
如果请求验证码的url与登录的url不同域的话就会报错跨域。而且还需要测试这样拿到的验证码图片是否还存在当前会话有效期内。请问上面的跨域问题该如何解决?
问题解答
回答1:你先抓包看看图片的请求路径,然后用requests下载图片就行了
回答2:楼上的是一种方法, 用selenium + PhantomJS也可以
回答3:图片验证码 和 读取图片时的cokies是一体的
只要保证回答的验证码和cokies相一致就行。
回答4:最后我采用的是js方式
var img=document.getElementById(’IMGCODEID’);var d=document.createElement(’CANVAS’);var cxt=d.getContext(’2d’);d.width=img.width;d.height=img.height;cxt.drawImage(img,0,0);img.src=d.toDataURL(’png’);
相关文章:
1. css - 关于HTML中width和height的疑问(这个提问的标题不好起)2. ruby-on-rails - 在安装RubyOnRails的时候出现问题3. HTML5表单必填属性设置自定义验证消息?4. mysql - 求一个sql语句,比较简单。5. javascript - 清空Chrome缓存的疑问6. 如何解决Centos下Docker服务启动无响应,且输入docker命令无响应?7. html5 - bootstrap修改样式的问题8. java - 如图,jsp页面的form中的action是怎么映射到这个位置的?为什么不写dynUser就可以映射到save?9. java - 接口中的成员变量怎么不是常量了?10. javascript - 在 model里定义的 引用表模型时,model为undefined。

网公网安备