热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python识别登陆验证码图片(完整代码)_Python+Selenium解决图片验证码登录或注册问题(推荐)...

1.解决思路首先要获得这张验证码的图片,但是该图片一般都是用的js写的,不能够通过url进行下载。解决方案:截图然后根据该图片的定位和

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 使用 图鉴 商用接口来识别验证码

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

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实现图片验证码登录或注册问题,希望对大家有所帮助!



推荐阅读
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文介绍了在安装或运行 Python 项目时遇到的 'ModuleNotFoundError: No module named setuptools_rust' 错误,并提供了解决方案。 ... [详细]
  • 本文详细介绍了如何使用Python编写爬虫程序,从豆瓣电影Top250页面抓取电影信息。文章涵盖了从基础的网页请求到处理反爬虫机制,再到多页数据抓取的全过程,并提供了完整的代码示例。 ... [详细]
  • 离线环境下的Python及其第三方库安装指南
    在项目开发中,有时会遇到电脑只能连接内网或完全无法联网的情况。本文将详细介绍如何在这种环境下安装Python及其所需的第三方库,确保开发工作的顺利进行。 ... [详细]
  • 在学习网页爬虫时,使用Selenium进行自动化操作。初次安装selenium模块后,第二天运行代码时遇到了ImportError:无法从'selenium'导入名称'webdriver'。本文将详细解释该问题的原因及解决方案。 ... [详细]
  • 本文介绍如何使用 Python 的 xlrd 库读取 Excel 文件,并将其数据处理后存储到数据库中。通过实际案例,详细讲解了文件路径、合并单元格处理等常见问题。 ... [详细]
  • Python 异步编程:ASGI 服务器与框架详解
    自 Python 3.5 引入 async/await 语法以来,异步编程迅速崛起,吸引了大量开发者的关注。本文将深入探讨 ASGI(异步服务器网关接口)及其在现代 Python Web 开发中的应用,介绍主流的 ASGI 服务器和框架。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文详细介绍了如何在Debian系统中正确配置Locale,以确保多语言支持和避免常见的警告信息。 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • 使用Pandas高效读取SQL脚本中的数据
    本文详细介绍了如何利用Pandas直接读取和解析SQL脚本,提供了一种高效的数据处理方法。该方法适用于各种数据库导出的SQL脚本,并且能够显著提升数据导入的速度和效率。 ... [详细]
author-avatar
尤物-tina_549
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有