selenium爬虫对验证码的识别(pytesseract识别验证码)

Selenium爬虫遇到验证码的处理

整体思路:
1、保存登录页面以png格式driver.save_screenshot(“img/ym.png”)
2、对页面中的验证码区域进行定位截取保存
3、对验证码图片进行处理掉用pytesseract进行验证码识别
4、判断验证码结果是否成功,未成功点击图片重新进行识别

import time
from selenium import webdriver
from PIL import Image,ImageEnhance
import pytesseract



url = 'https://www.tfswufe.edu.cn/'

driver = webdriver.Chrome(executable_path='/Users/denglu/PycharmProjects/new/chromedriver')
driver.implicitly_wait(2)  #隐式等待

driver.get(url)
# 验证码识别函数,传入的driver为selenium页面句柄
def yzm(driver):
    # 保存整个页面为png
    driver.save_screenshot("img/ym.png")
    #通过xpath找到图片的位置定位,根据自己情况修改xpath地址
    img = driver.find_element_by_xpath('//*[@id="fm1"]/div[1]/section[2]/div[1]/span/img')
    #获取图片的相对位置left,top 然后计算right,bottom
    left = img.location['x']
    top = img.location['y']
    right = img.location['x'] + img.size['width']
    bottom = img.location['y'] + img.size['height']
    #打开页面png,通过crop函数截取到验证码区域
    im = Image.open('img/ym.png')
    im = im.crop((left, top, right, bottom))
    #保存验证码图片
    im.save('img/yzm.png')
	
    # 验证码识别,打开验证码对图像进行处理,
    imageCode = Image.open("img/yzm.png")  # 图像增强,二值化
    sharp_img = ImageEnhance.Contrast(imageCode).enhance(2.0)
    sharp_img.save("img/yzm_c.png")
    sharp_img.load()  # 对比度增强
    # 验证码识别,使用pytesseract.image_tostring(img).strip()
    code = pytesseract.image_to_string(sharp_img).strip()
    print('验证码识别为:' + str(code))
    return code

#调用函数有情况出现识别为空,如果验证码识别失败,点击图片重新进行识别,
code = yzm(driver)
while code=="":
    driver.find_element_by_xpath('//*[@id="fm1"]/div[1]/section[2]/div[1]/span/img').click()
    code = yzm(driver)
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值