爬虫验证码识别方法
Posted 我在学python
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫验证码识别方法相关的知识,希望对你有一定的参考价值。
一、使用云打码平台
QQ邮箱的登录不需要验证码,一般网站需要验证码,验证码一般分为(1)url不变,验证码不变和(2)url不变,验证码会变两种情况。
1)实例化session;
3)使用session请求验证码,然后识别;
4)使用发送post请求。
下面就Selenium请求登录页面做一个例子:
# coding=utf-8
from selenium import webdriver
from time import sleep
import 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')
# 获取登录页面的cookie
cookies = {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 Image
import pytesseract
file_path = '/home/yang/Desktop/选区_081.png'
img = Image.open(file_path)
print(pytesseract.image_to_string(img))
这个识别一般不准。可以采用机器学习等方法,进行图片识别,后续更新。
三、使用浏览器截图
用Phantom浏览器截图功能。
1)首先控制浏览器界面大小;
2)采用截图方式然后计算出验证码在页面的绝对位置,截取验证码,保存为图片;
3)将图片发送给云打码,也可以实现验证码识别。
以上是关于爬虫验证码识别方法的主要内容,如果未能解决你的问题,请参考以下文章