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

 更新时间:2020年02月09日 12:23:26   作者:暗潮汹涌  
这篇文章主要介绍了Python Selenium解决图片验证码登录或注册问题,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

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字符串格式化(%格式符和format方式)

    python字符串格式化(%格式符和format方式)

    在编写程序的过程中,经常需要进行格式化输出,每次用每次查,干脆就在这里整理一下,下面这篇文章主要给大家介绍了关于python字符串格式化的相关资料,分别是%格式符和format方式,需要的朋友可以参考下
    2022-02-02
  • python用ConfigObj读写配置文件的实现代码

    python用ConfigObj读写配置文件的实现代码

    发现一个简单而又强大的读写配置文件的lib,个人觉得最大的亮点在于自带的格式校验功能,并且支持复杂的嵌套格式,而且使用起来也相当的简便
    2013-03-03
  • python实现根据文件格式分类

    python实现根据文件格式分类

    这篇文章主要为大家详细介绍了python实现根据文件格式分类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • Python模拟实现高斯分布拟合

    Python模拟实现高斯分布拟合

    当我们绘制一个数据集(如直方图)时,图表的形状就是我们所说的分布,最常见的连续值形状是钟形曲线,也称为高斯分布或正态分布,下面我们就来利用Python模拟实现一下高斯分布吧
    2023-12-12
  • Python中的Logging模块在项目应用小结

    Python中的Logging模块在项目应用小结

    Python标准库中的logging模块为我们提供了强大而灵活的日志记录功能,本文将介绍如何使用logging模块,并探讨其在Python开发中的实际应用,感兴趣的朋友一起看看吧
    2024-04-04
  • python的range和linspace使用详解

    python的range和linspace使用详解

    今天小编就为大家分享一篇python的range和linspace使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python中的关键字(pass)使用

    python中的关键字(pass)使用

    这篇文章主要介绍了python中的关键字(pass)使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Python中如何获取类属性的列表

    Python中如何获取类属性的列表

    这篇文章主要给大家介绍了在Python中如何获取类属性的列表,文中通过示例代码介绍的很详细,相信对大家的学习或者工作具有一定的参考借鉴价值,有需要的朋友可以参考借鉴,下面来一起看看吧。
    2016-12-12
  • Python实现的三层BP神经网络算法示例

    Python实现的三层BP神经网络算法示例

    这篇文章主要介绍了Python实现的三层BP神经网络算法,结合完整实例形式分析了Python三层BP神经网络算法的具体实现与使用相关操作技巧,需要的朋友可以参考下
    2018-02-02
  • Python实现简易超市管理系统

    Python实现简易超市管理系统

    这篇文章主要为大家详细介绍了python如何实现简易超市管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09

最新评论