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基础教程之基本数据类型和变量声明介绍
Aug 29 Python
Python实现爬取知乎神回复简单爬虫代码分享
Jan 04 Python
使用Python脚本对Linux服务器进行监控的教程
Apr 02 Python
Python 字符串与数字输出方法
Jul 16 Python
pandas 根据列的值选取所有行的示例
Nov 07 Python
详解Django-restframework 之频率源码分析
Feb 27 Python
python selenium 查找隐藏元素 自动播放视频功能
Jul 24 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
May 03 Python
Python如何使用input函数获取输入
Aug 06 Python
教你如何用python操作摄像头以及对视频流的处理
Oct 12 Python
如何用Matlab和Python读取Netcdf文件
Feb 19 Python
如何解决.cuda()加载用时很长的问题
May 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 HTML代码串 截取实现代码
2009/06/29 PHP
openPNE常用方法分享
2011/11/29 PHP
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
使用js简单实现了tree树菜单
2013/11/20 Javascript
jquery实现显示已选用户
2014/07/21 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
2015/12/09 Javascript
JS+html5 canvas实现的简单绘制折线图效果示例
2017/03/13 Javascript
基于VUE.JS的移动端框架Mint UI的使用
2017/10/11 Javascript
AngualrJs清除定时器遇到的坑
2017/10/13 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
2017/12/05 jQuery
解决vue 退出动画无效的问题
2020/08/09 Javascript
如何利用node转发请求详解
2020/09/17 Javascript
用map函数来完成Python并行任务的简单示例
2015/04/02 Python
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
Python抽象类的新写法
2015/06/18 Python
基于python中的TCP及UDP(详解)
2017/11/06 Python
python定向爬取淘宝商品价格
2018/02/27 Python
用python与文件进行交互的方法
2018/03/01 Python
python 画出使用分类器得到的决策边界
2019/08/21 Python
Python Django 简单分页的实现代码解析
2019/08/21 Python
python 利用pyttsx3文字转语音过程详解
2019/09/25 Python
Python序列对象与String类型内置方法详解
2019/10/22 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
解决python父线程关闭后子线程不关闭问题
2020/04/25 Python
纯CSS3实现扇形动画菜单(简化版)实例源码
2017/01/17 HTML / CSS
美国猫狗药物和用品网站:PetCareRx
2017/01/05 全球购物
FragranceNet中文网:北美健康美容线上零售商
2020/08/26 全球购物
公司管理建议书范文
2014/03/12 职场文书
医学生就业推荐表自我鉴定
2014/03/26 职场文书
读书伴我成长演讲稿
2014/05/07 职场文书
党的群众教育实践活动实施方案
2014/06/12 职场文书
2014年教师节演讲稿范文
2014/09/10 职场文书
银行员工犯错检讨书
2014/09/16 职场文书
慈善献爱心倡议书
2015/04/27 职场文书
MySQL中出现乱码问题的终极解决宝典
2021/05/26 MySQL
SpringBoot整合阿里云视频点播的过程详解
2021/12/06 Java/Android