python使用selenium和pytesser3处理爬虫页面中的验证码

8 篇文章 0 订阅
6 篇文章 0 订阅
from selenium import webdriver
import pytesser3
import time

driver = webdriver.Chrome()

# 循环输入验证码,因为一遍可能不能正确识别,直到正确识别,再进行其他操作
accept = False
while not accept:
    try:
        # 打开含有验证码的搜索页
        driver.get('your link')
        time.sleep(3)
        # 找到输入框input,输入你的搜索关键词
        input = driver.find_element_by_id('keyword')
        input.send_keys('your keyword')
        time.sleep(5)

        # 验证码识别
        # 先对浏览器当前页面截图,并存储
        driver.get_screenshot_as_file('C:\\screenshot.jpg')
        im = Image.open('C:\\screenshot.jpg')

        # 用box裁剪出截图中验证码的所在区域
        box = [100, 100, 200, 200]  # 设置要裁剪的区域
        region = im.crop(box)  # 此时,region是一个新的图像对象
        region.save('C:\\codeImage.jpg')

        time.sleep(3)  # 防止由于网速,可能图片还没保存好,就开始识别

        im = Image.open('C:\\codeImage.jpg')
        imgry = im.convert('L')  # 图像加强,二值化
        sharpness = ImageEnhance.Contrast(imgry)  # 对比度增强
        sharp_img = sharpness.enhance(2.0)

        # 将处理后的验证码图片存在code.jpg中
        sharp_img.save('C:\\code.jpg')
        # sharp_img.show() #这是分布测试时候用的,整个程序使用需要注释掉

        # 调用pytesser3方法,变量code即为识别出的图片数字str类型
        code = pytesser3.image_file_to_string('C:\\code.jpg', graceful_errors=True)
        print('code:' + code)

        # 在页面的验证码输入框中输入识别出的code
        code_input = driver.find_element_by_id('keyword2')
        code_input.send_keys(code)
        time.sleep(2)

        # 然后进行搜索和后续操作
        driver.find_element_by_class_name('search').click()
        time.sleep(2)

        # 如果验证码没有识别正确,可能会弹出提示框,这里我们需要对提示框进行处理

        # 在页面中寻找提示框
        res = EC.alert_is_present()(driver)

        # 如果弹出提示框
        if res:
            # 点击提示框的确认,从新搜索一遍
            res.accept()
            time.sleep(5)
        else:
            # 说明已经识别成功并搜索成功,跳出循环进行下一步操作
            accept = True
    except UnicodeDecodeError:
        accept = False
        time.sleep(3)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值