Python OCR识别图片验证码(一)

19 篇文章 0 订阅
17 篇文章 0 订阅

欢迎加入学习交流QQ群:657341423


对于某些网站登录的时候,往往需要输入验证码才能实现登录。如果要爬虫这类网站,往往总会比这个验证码导致无法爬取数据。以下介绍一种比较折中的方法,也是比较可行的方法:
实现思想:
1、通过截图获取验证码图片,为什么要截图,有的人会说,可以通过验证码图片的链接爬取下来,再用OCR识别就可以了,理论上这个方法是可行的,但是当你用这方法的时候,会发觉下载的图片和你实际页面的图片里面的内容是不一样的。
2、截图图片后,通过OCR识别,返回验证码内容,完成登录。

代码:

#保存图片,通过显示器xy坐标,这里值得注意的是,如果每个显示器的分辨率是不一样的,(332,415,385,440)这个坐标会随时改动。
from PIL import ImageGrab
addr='E:\\OCR\\bb.png'
im = ImageGrab.grab((332,415,385,440))
im.save(addr,'png')

OCR识别,尽管上OCR识别有一定的准确率,但这个是可以通过ocr开发提高识别准确率的。

import pytesser3
print (pytesser3.image_file_to_string('bb.png'))

运行:
下载图片:
这里写图片描述
OCR识别:
这里写图片描述

定义一个简单登录方法:

from PIL import ImageGrab
import pytesser3
from selenium import webdriver

def loginSys(loginName,password):
	driver=webdriver.Ie()  
	driver.get(url)
	driver.implicitly_wait(60)
	LoginTitle=driver.title

	while 1:
		result=driver.title
		if LoginTitle==result:
			#截图
			addr='E:\\OCR\\bb.png'
			im = ImageGrab.grab((332,415,385,440))
			im.save(addr,'png')
			#OCR
			Code=pytesser3.image_file_to_string('bb.png')
			print (pytesser3.image_file_to_string('bb.png'))
			#自动登录,find_element_by_id自行修改
			driver.switch_to.frame('loginFormFrame')
			driver.find_element_by_id('id_loginName').send_keys(loginName)
			driver.find_element_by_id('id_password').send_keys(password)
			driver.find_element_by_id('id_certCode').send_keys(Code)
			driver.implicitly_wait(10)
			driver.find_element_by_xpath('//img[@onclick="doLogin();"]').click()
			driver.implicitly_wait(10)
			driver.switch_to.default_content()
		else:
			break
	#cookies传递,用于request爬取数据		
	cook=driver.get_cookies()
	cookies[cook[0]['name']]=cook[0]['value']

解释:这里用了selenium做一个自动化登录的,这里会有疑问,为何不用requests,或者scrapy直接做后台登录。
原因如下:首先我们找到登录
这里写图片描述
这是一张图片,而且图片触发是一个js,再看js
js代码很长,大部分都是做检测功能。
这里写图片描述
如图所示,可以看到,这个登录是用get方法实现的,但是str是做了加密处理。
加密处理最简单使用selenium 模拟人为登录,但性能上不算最优。除此之外,还可以在python中对str进行加密处理。本章节使用selenium 模拟人为登录。


Python OCR识别图片验证码(二)


欢迎加入学习交流QQ群:657341423

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xy-Huang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值