Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >尝试绕过验证码

尝试绕过验证码

作者头像
赵云龙龙
发布于 2020-06-16 07:13:20
发布于 2020-06-16 07:13:20
82400
代码可运行
举报
文章被收录于专栏:python爱好部落python爱好部落
运行总次数:0
代码可运行

最近出了点安全事故,有人盗号。而且手段极其简单,就是暴力破解。 为了提高安全性,UI的界面加了验证机制。这也为自动化测试提高了难度。

按照一般的做法,是先截取页面的图,然后通过坐标位置,来定位验证码的位置,然后截取验证码。 效果如下

我首先想到的是,通过mitmproxy拿到图片的url来获取图片,进而来识别图片的文字,发现那url,每次请求都会变化。

于是只能用截图的方式了。

对于web来说,可以通过元素,根据attribute来获取URL,来获取验证码图片,并将图片放大,这样识别的效果更好。

对于App来说,如果不能通过URL来获取,那只能通过截图的方式来碰碰运气了。 以下是App的方式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.save_screenshot("login.png")
captcha=driver.find_element_by_xpath("//android.view.View[3]/android.widget.Image")
left = captcha.location['x']  # 区块截图左上角在网页中的x坐标
top = captcha.location['y']  # 区块截图左上角在网页中的y坐标
right = left + captcha.size['width']  # 区块截图右下角在网页中的x坐标
bottom = top + captcha.size['height']  # 区块截图右下角在网页中的y坐标

picture = Image.open(r'login.png')
picture = picture.crop((left, top, right, bottom))  # 二次截图:形成区块截图
imgry = picture.convert('L')  # 图像加强,二值化
sharpness = ImageEnhance.Contrast(imgry)  # 对比度增强
sharp_img = sharpness.enhance(2.0)
sharp_img.save(r'captcha.png')
code = test()
print(code)

图片有了,怎样识别文字能,用OCR来识别,可以去这里下载一个 https://digi.bib.uni-mannheim.de/tesseract/ 然后安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python -m pip install --upgrade pip
pip3 install tesserocr pillow

运行以下代码来识别图片。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def test():


    image = Image.open(image_path)

    text = pytesseract.image_to_string(image)  # 使用简体中文解析图片
    print(str(text))

    return str(text)

可能会出错:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it's not in your path

解决方法: 1.找到python的安装路径下的pytesseract: 例如我的是 E:\Python3\Lib\site-packages\pytesseract

2.用文本编辑器打开,查找tesseract_cmd

将原来的 tesseract_cmd = 'tesseract' 改为: tesseract_cmd = 'OCR的安装路径下的tessract.exe'

例如我的是 tesseract_cmd = 'C:\Program Files\Tesseract-OCR\tesseract.exe' 然后运行,就成功了。 等一下,发现运行很多次,有的时候能够完全识别,有的时不能,识别率真的不高。现在还是很简单的情况下,如果更多干扰,那更不行了。

于是在网上搜索提高识别率的,比如增加灰度等,还是没什么用,最后听说搞AI识别,能训练啥的,就用了一个百度AI识别的,一天免费500次。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import requests
import json
import base64
import time


class baiduCode(object):

    @classmethod
    def get_token(cls):
        """
        当前函数只用调用一次,用来获取当前账号的token
        :return:
        """
        # 标记当前精准识别是否使用完
        cls.curr_url = ''
        cls.basic_flag = False
        cls.max_num = 100
        cls.login_url = 'https://aip.baidubce.com/oauth/2.0/token'
        cls.login_params = {
            'grant_type': 'client_credentials',
            'client_id': 'wAIXfXOUS8ztLa4FrK3rZex1',
            'client_secret': '3b8nvjSGUZq0LPC18VVAizKYRBbny6Mq'
        }
        cls.headers = {
            'Content-Type': 'application/x-www-form-urlencoded'
        }
        response = requests.post(cls.login_url, params=cls.login_params, headers=cls.headers)
        result = json.loads(response.text)
        cls.token = result['access_token']

    @classmethod
    def get_code(cls, path='', url=''):
        cls.num = 0
        # 普通图片识别的请求链接,正确率50%(测试了500张图片)
        cls.general_basic_url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic'
        # 高精度图片识别的请求链接,正确率80%(测试了500张图片)
        cls.accurate_basic_url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic'
        if path:
            if not cls.basic_flag:
                cls.curr_url = cls.accurate_basic_url
            with open(path, 'rb') as f:
                base64_data = base64.b64encode(f.read())
                base = base64_data.decode()
                cls.basic_params = {
                    'image': base,
                    'access_token': cls.token
                }
        elif url:
            cls.curr_url = cls.general_basic_url
            cls.basic_params = {
                'url': url,
                'access_token': cls.token
            }
        else:
            raise ValueError('当前path和url参数均错误')
        time.sleep(0.5)
        while True:
            try:
                response = requests.post(cls.curr_url, params=cls.basic_params, headers=cls.headers)
                result = json.loads(response.text)
                # 判断当前精准识别是否被使用完
                try:
                    result['words_result']
                except Exception as e:
                    print(e)
                    cls.num += 1
                    if cls.num > cls.max_num:
                        raise ValueError('当前尝试的错误次数超过%d次,请重新调用'%(cls.max_num))
                    cls.basic_flag = True
                    cls.curr_url = cls.general_basic_url
                    continue
                code = result['words_result'][0]['words']
                return code
                break
            except Exception as e:
                print('error: ', e)
                cls.num += 1
                if cls.num > cls.max_num:
                    raise ValueError('当前尝试的错误次数超过%d次,请重新调用'%(cls.max_num))


if __name__ == '__main__':
    # 当前获取token的函数只用调用一次
    baiduCode.get_token()
    # 直接传图片的地址就好
    image_path = "C:\\work\\code\\android\\captcha.png"
    code = baiduCode.get_code(path=image_path)
    print(code)

用起来效果不好,还不如OCR呢。

看来得想别的方法绕过去了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python粉丝团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【收藏】图片转成文字的方法总结,python批量图片转文字信息参考源码
在日常办公或者学习中,往往存在这样一个工作场景,比如,“老王,我这里有一张图片,你把里面的文字信息给我整理出来”,都2021年了,你真的还在手敲图片文字信息么?那么还不赶紧收藏这篇秘籍,这里本渣渣总结了三种方法,教你如何将图片上的文字信息提取出来,图片转成文字信息的方法。
二爷
2021/01/25
5.6K0
【收藏】图片转成文字的方法总结,python批量图片转文字信息参考源码
pytesseract+mechanize识别验证码自动登陆
https://digi.bib.uni-mannheim.de/tesseract/
py3study
2020/01/20
1.2K0
Selenium&Pytesseract模拟登录+验证码识别
1 图像采集:就直接通过HTTP抓HTML,然后分析出图片的url,然后下载保存就可以了
测试开发社区
2019/09/20
2K0
Selenium&Pytesseract模拟登录+验证码识别
python下调用pytesseract识别某网站验证码
pytesseract最新版本0.1.6,网址:https://pypi.python.org/pypi/pytesseract
黯然销魂掌
2018/09/27
1.7K0
亚某逊验证码识别-使用百度OCR
最近在抓取亚某逊的时候, 除了随机请求头之外, 还有时不时出现的验证码页面, 原来换个ip还可以, 但是时间长了, 出现的越来越频繁, 所以这次就来彻底解决这个验证码的问题
不止于python
2022/05/31
6290
亚某逊验证码识别-使用百度OCR
简单数字图片验证码的生成及识别
网站上的验证码的作用是保护网站安全,一般网站都要通过验证码来防止机器大规模注册,机器暴力破解数据密码等危害。
字节脉搏实验室
2020/03/19
2.3K0
简单数字图片验证码的生成及识别
Python自动打码,DdddOcr通用验证码自动识别库
在Python爬虫中,或者使用POST提交的过程中,往往需要提交验证码来验证,除了人工打码,付费的api接口(打码接口),深度学习识别验证码,当然还有适合新人使用的OCR验证码识别库,简单的验证码是可以完全实现自动打码的,比如下面本渣渣分享的通用验证码自动识别库:ddddocr(带带弟弟OCR)!
二爷
2021/11/19
3.7K0
Python自动打码,DdddOcr通用验证码自动识别库
python实现图片文字提取,准确率高达99%,强无敌!!!
上次我使用的百度AI开放平台的API接口实现图片的转化,后来有许多小伙伴都私信问我,怎么获取百度AI平台的AK和SK。为了统一回答大家的问题,今天我又使用百度API实现了一个从图片中提取文字和识别身份证的功能,详细描述实现过程,有收获的小伙伴记得收藏、转发分享哦。
菜鸟小白的学习分享
2020/07/14
5.8K0
python实现图片文字提取,准确率高达99%,强无敌!!!
Python爬虫入门教程 56-100 python爬虫高级技术之验证码篇2-开放平台OCR技术
今天你要学习的验证码采用通过第三方AI平台开放的OCR接口实现,OCR文字识别技术目前已经比较成熟了,而且第三方比较多,今天采用的是百度的。
梦想橡皮擦
2019/04/18
1.3K0
Python爬虫入门教程 56-100 python爬虫高级技术之验证码篇2-开放平台OCR技术
python 自动化测试(1):获取验证码图片,实现自动登录
firefox:59.0.2 selenium:3.11.0
Mokwing
2020/09/08
2.3K0
python调用百度图片识别api
链接:https://cloud.baidu.com/doc/Reference/s/9jwvz2egb
小小咸鱼YwY
2020/09/16
1.5K0
Python识别验证码
tessercat下载地址:https://digi.bib.uni-mannheim.de/tesseract/ //请依据自己的操作系统下载exe文件安装
Python研究者
2020/10/22
2.4K0
Python识别验证码
AI图像识别_头像搜索图片识别在线
使用百度AI图像识别提供的API接口来搭建识图工具,首先要注册百度开发者账号,然后找到图像识别页面,创建应用,申请成功后会给两个重要的数据API Key ,Secret Key,这是实现识图的重要参数,以动物识别为例:
全栈程序员站长
2022/09/20
3.5K0
AI图像识别_头像搜索图片识别在线
图形验证码识别技术
阻碍我们爬虫的。有时候正是在登录或者请求一些数据时候的图形验证码。因此这里我们讲解一种能将图片翻译成文字的技术。将图片翻译成文字一般被成为光学文字识别(Optical Character Recognition),简写为OCR。实现OCR的库不是很多,特别是开源的。因为这块存在一定的技术壁垒(需要大量的数据、算法、机器学习、深度学习知识等),并且如果做好了具有很高的商业价值。因此开源的比较少。这里介绍一个比较优秀的图像识别开源库:Tesseract。
用户2200417
2022/03/07
1.9K0
Python爬虫技术系列-05字符验证码识别
OCR(Optical Character Recognition,光学字符识别)是指使用扫描仪或数码相机对文本资料进行扫描成图像文件,然后对图像文件进行分析处理,自动识别获取文字信息及版面信息的软件。一般情况下,对于字符型验证码的识别流程如下:主要过程可以分解为五个步骤:图片清理,字符切分,字符识别,恢复版面、后处理文字几个步骤。通过本章节学习联系搭建OCR环境,使用Tesseract平台对验证码进行识别。
用户2225445
2022/11/12
1.3K0
Python爬虫技术系列-05字符验证码识别
太好用!图片转文字没有python环境也能运行了!!!
昨天菜鸟小白的分享——将图片中的文字提取出来,有不少小伙伴也都私信我,对我表示肯定,更是有小伙伴希望我将昨天的代码做成和之前一样的可执行文件。本来我是以为将整个程序完善了之后再打包为可执行文件的,既然已经有小伙伴私信要求了,那我就直接将这个打包了。公众号上私信回复“文字识别可执行文件”即可获取。
菜鸟小白的学习分享
2020/07/14
5840
Python 实现识别弱图片验证码
目前,很多网站为了防止爬虫肆意模拟浏览器登录,采用增加验证码的方式来拦截爬虫。验证码的形式有多种,最常见的就是图片验证码。其他验证码的形式有音频验证码,滑动验证码等。图片验证码越来越高级,识别难度也大幅提高,就算人为输入也经常会输错。本文主要讲解识别弱图片验证码。
猴哥yuri
2018/08/16
4.1K0
女友:啥,识别个文字还要付费?我立马用Python实现了一款免费版文字识别工具[通俗易懂]
有一天和女朋友聊天,翻着手机上的软件,看电影、看编程网站, 她说到:“这么多 APP,怎么就没一个做文字识别很方便的呢?
全栈程序员站长
2022/09/01
2K0
[90]python爬虫-尝试使用人工和OCR处理验证码模拟登入
刚开始在网上看别人一直在说知乎登入首页有有倒立的汉字验证码,我打开自己的知乎登入页面,发现只有账号和密码,他们说的倒立的验证码去哪了,后面仔细一想我之前登入过知乎,应该在本地存在cookies,然后我将cookies删除掉果然就有需要验证码了:
周小董
2022/04/12
5460
[90]python爬虫-尝试使用人工和OCR处理验证码模拟登入
使用burp插件captcha-killer识别图片验证码(跳坑记)
captcha-killer要解决的问题是让burp能用上各种验证码识别技术!插件当前针对的图片类型验证码,其他类型当前不支持。captcha-killer本身无法识别验证码,它专注于对各种验证码识别接口的调用。
Ms08067安全实验室
2022/02/10
4K0
使用burp插件captcha-killer识别图片验证码(跳坑记)
推荐阅读
相关推荐
【收藏】图片转成文字的方法总结,python批量图片转文字信息参考源码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验