Python +Selenium解决图片验证码登录或注册问题(推荐)


Posted in Python onFebruary 09, 2020

1. 解决思路

首先要获得这张验证码的图片,但是该图片一般都是用的js写的,不能够通过url进行下载。
解决方案:截图然后根据该图片的定位和长高,使用工具进行裁剪
裁剪完毕之后,使用工具解析该图片。

2. 代码实现

2.1 裁剪出验证码图片

裁剪图片需要使用 Pillow 库,进入pip包路径后输入安装命令pip install Pillow:
之前安装的时候忘记了截图,只能够截一张安装后的图片了 ?(:з?∠)_

安装完成后,代码实现方式如下:

#coding=utf-8
from selenium import webdriver
import time
from PIL import Image
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Chrome()
# 进入该网站
driver.get("http://www2.nmec.org.cn/wangbao/nme/sp/root/account/signup.html")
# 能否在5s内找到验证码元素,能才继续
if WebDriverWait(driver,5).until(lambda the_driver:the_driver.find_element_by_id("CaptchaImg"), "查找不到该元素"):
 # 对于一次截屏无法到截到验证码的情况,需要滚动一段距离,然后验证码的y坐标也应该减去这段距离
 scroll = 500
 js = "document.documentElement.scrollTop='%s'" %scroll
 driver.execute_script(js)
 # 截下该网站的图片
 driver.get_screenshot_as_file("E:/Python_selenium_advance/Picture/full.png")
 # 获得这个图片元素
 img_ele = driver.find_element_by_id("CaptchaImg")
 # 得到该元素左上角的 x,y 坐标和右下角的 x,y 坐标
 left = img_ele.location.get('x')
 upper = img_ele.location.get('y') - 500
 right = left + img_ele.size.get('width')
 lower = upper + img_ele.size.get('height')
 # 打开之前的截图
 img = Image.open("E:/Python_selenium_advance/Picture/full.png")
 # 对截图进行裁剪,裁剪的范围为之前验证的左上角至右下角范围
 new_img = img.crop((left, upper, right, lower))
 # 裁剪完成之后保存到指定路径
 new_img.save("E:/Python_selenium_advance/Picture/croped.png")
 
 time.sleep(2)
 driver.quit()
else:
 print("找不到验证码元素")

2.2 使用 图鉴 商用接口来识别验证码

接口介绍网址:http://www.ttshitu.com/docs/python.html#pageTitle

调用该接口直接使用网页上的接口文档就行,代码如下:

import json
import requests
import base64
from io import BytesIO
from PIL import Image
from sys import version_info

def base64_api(uname, pwd, softid, img):
 img = img.convert('RGB')
 buffered = BytesIO()
 img.save(buffered, format="JPEG")
 if version_info.major >= 3:
  b64 = str(base64.b64encode(buffered.getvalue()), encoding='utf-8')
 else:
  b64 = str(base64.b64encode(buffered.getvalue()))
 data = {"username": uname, "password": pwd, "softid": softid, "image": b64}
 result = json.loads(requests.post("http://api.ttshitu.com/base64", json=data).text)
 if result['success']:
  return result["data"]["result"]
 else:
  return result["message"]
 return ""

将其保存为一个单独的 analysis_captcha.py ,然后再导入该方法,直接使用即可:

from analysis_captcha import base64_api

def analysis_captcha(filename):
 '''
 使用 图鉴 商用接口来识别指定位置的验证码图片
 :param filename: 验证码图片位置
 :return : 验证码文本
 '''
 img_path = filename
 img = Image.open(img_path)
 result = base64_api(uname='kaibin', pwd='******', softid='4545454', img=img)
 return result

验证码识别可能会出错,到时候再点击验证码图片换一张,然后重来即可。

总结

以上所述是小编给大家介绍的Python +Selenium实现图片验证码登录或注册问题,希望对大家有所帮助!

Python 相关文章推荐
python使用内存zipfile对象在内存中打包文件示例
Apr 30 Python
Python之PyUnit单元测试实例
Oct 11 Python
Python函数中*args和**kwargs来传递变长参数的用法
Jan 26 Python
python基于itchat实现微信群消息同步机器人
Feb 27 Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
Jun 07 Python
Python实现找出数组中第2大数字的方法示例
Mar 26 Python
利用python对Excel中的特定数据提取并写入新表的方法
Jun 14 Python
Django框架安装方法图文详解
Nov 04 Python
keras 自定义loss model.add_loss的使用详解
Jun 22 Python
python读写数据读写csv文件(pandas用法)
Dec 14 Python
如何用python批量调整视频声音
Dec 22 Python
基于Python 函数和方法的区别说明
Mar 24 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
Feb 09 #Python
python 爬取疫情数据的源码
Feb 09 #Python
python代码如何实现余弦相似性计算
Feb 09 #Python
python字符串替换re.sub()实例解析
Feb 09 #Python
Python随机数函数代码实例解析
Feb 09 #Python
Python如何访问字符串中的值
Feb 09 #Python
python3 字符串知识点学习笔记
Feb 08 #Python
You might like
用PHP查询域名状态whois的类
2006/11/25 PHP
php生成图形(Libchart)实例
2013/11/06 PHP
PHP防止注入攻击实例分析
2014/11/03 PHP
ThinkPHP5框架实现简单的批量查询功能示例
2018/06/07 PHP
php中try catch捕获异常实例详解
2020/08/06 PHP
jquery蒙版控件实现代码
2010/12/08 Javascript
js调用css属性写法
2013/09/21 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
2016/06/03 Javascript
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
vue实现简单表格组件实例详解
2017/04/16 Javascript
详解nodeJS之路径PATH模块
2017/05/31 NodeJs
微信小程序获取手机网络状态的方法【附源码下载】
2017/12/08 Javascript
解决Nodejs全局安装模块后找不到命令的问题
2018/05/15 NodeJs
es6基础学习之解构赋值
2018/12/10 Javascript
js取小数点后两位四种方法
2019/01/18 Javascript
JavaScript数组、json对象、eval()函数用法实例分析
2019/02/21 Javascript
vue-cli3项目展示本地Markdown文件的方法
2019/06/07 Javascript
利用JS代码自动删除稿件的普通弹幕功能
2019/09/20 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
2020/03/02 Javascript
JS实现随机点名器
2020/04/12 Javascript
python爬取个性签名的方法
2018/06/17 Python
python制作图片缩略图
2019/04/30 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
2019/08/30 Python
python将字符串转变成dict格式的实现
2019/11/18 Python
把vgg-face.mat权重迁移到pytorch模型示例
2019/12/27 Python
Python selenium爬虫实现定时任务过程解析
2020/06/08 Python
美国在线眼镜商城:Eyeglasses.com
2017/06/26 全球购物
建筑工程技术应届生求职信
2013/11/17 职场文书
大学校园毕业自我鉴定
2014/01/15 职场文书
软件售后服务方案
2014/05/29 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
2015年秋学期师德师风建设工作总结
2015/10/23 职场文书
商务英语邮件开头问候语
2015/11/10 职场文书
详解MySQL集群搭建
2021/05/26 MySQL
基于PyTorch实现一个简单的CNN图像分类器
2021/05/29 Python