爬虫验证码识别方法

Posted 我在学python

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫验证码识别方法相关的知识,希望对你有一定的参考价值。

一、使用云打码平台

QQ邮箱的登录不需要验证码,一般网站需要验证码,验证码一般分为(1)url不变,验证码不变和(2)url不变,验证码会变两种情况。

1)实例化session;

3)使用session请求验证码,然后识别;

4)使用发送post请求。


下面就Selenium请求登录页面做一个例子:

# coding=utf-8from selenium import webdriverfrom time import sleepimport requests# 云打码平台模块,用于识别验证码from yundama.dama import indetify# 初始化使用Chrome浏览器driver = webdriver.Chrome()# Selenium登录页面driver.get('http://jw.stbu.edu.cn/service/login.html')# 向用户名和密码写入内容driver.find_element_by_id('username').send_keys('我的工号')driver.find_element_by_id('password').send_keys('我的密码')# 获取验证码图片地址ret1 = driver.find_element_by_xpath('//span[@id="randomPhoto"]/img').get_attribute('src')# 获取登录页面的cookiecookies = {i['name']: i['value'] for i in driver.get_cookies()}# 使用requests模发送带cookie的请求,请求验证码,该验证码和网页不一致resp = requests.get(ret1, cookies=cookies)# 将图片写入文件,查看云打码返回结果是否和图片一致with open('code.jpg', 'wb') as f: f.write(resp.content)# 调用云打码获取验证码结果result = indetify(resp.content)# 将验证码写入验证码位置driver.find_element_by_id('ranstring').send_keys(result)# 暂停一秒程序sleep(1)# 点击登录即可进入登录后的页面driver.find_element_by_id("submit2").click()sleep(100)# 退出浏览器driver.quit()



二、使用图像识别技术

Tesseract是一个将图像翻译成文字的OCR库(光学文字识别:通过色差识别文字),在Ubuntu中可以使用以下命令安装:

sudo apt-get install tesseract-ocr

在python中要使用tesseract需要安装对应的库:

pip install pytesseract

安装好后,在终端输入

tesseract 选区_079.png 文本内容.txt

得到以下结果:

对比发现识别结果不是很好。

做一个简单例子:

from PIL import Imageimport pytesseract
file_path = '/home/yang/Desktop/选区_081.png'
img = Image.open(file_path)print(pytesseract.image_to_string(img))

这个识别一般不准。可以采用机器学习等方法,进行图片识别,后续更新。


三、使用浏览器截图

用Phantom浏览器截图功能。

1)首先控制浏览器界面大小;

2)采用截图方式然后计算出验证码在页面的绝对位置,截取验证码,保存为图片;

3)将图片发送给云打码,也可以实现验证码识别。

以上是关于爬虫验证码识别方法的主要内容,如果未能解决你的问题,请参考以下文章

爬虫日记-验证码识别

爬虫验证码识别初体验(文末代码)

第二十三节:scrapy爬虫识别验证码图片验证码识别

python网络爬虫之如何识别验证码

爬虫教程验证码识别

爬虫 - 用ocr来识别验证码