千家信息网

Python爬虫中破解验证码识别和弹窗处理

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关Python爬虫中破解验证码识别和弹窗处理,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言在我们写爬虫的过程中,目标网站常见的干扰手段
千家信息网最后更新 2026年11月03日Python爬虫中破解验证码识别和弹窗处理

这篇文章将为大家详细讲解有关Python爬虫中破解验证码识别和弹窗处理,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

前言

在我们写爬虫的过程中,目标网站常见的干扰手段就是设置验证码等,本就将基于Selenium实战讲解如何处理弹窗和验证码,爬取的目标网站为某仪器预约平台

可以看到登录所需的验证码构成比较简单,是彩色的标准数字配合简单的背景干扰

因此这里的验证码识别不需要借助人工智能的手段,可直接利用二值法对图片处理后交给谷歌的识别引擎tesseract-OCR即可获得图中的数字。

Python实战

首先导入所需模块

import re# 图片处理from PIL import Image# 文字识别import pytesseract# 浏览器自动化from selenium import webdriverimport time

解决弹出框问题

先尝试打开示例网站

url = 'http://lims.gzzoc.com/client'driver = webdriver.Chrome()driver.get(url)time.sleep(30)

有趣的地方出现了,网站显示了一个我们前面没有看到的弹窗,简单说一下弹窗的知识点,初学者可以将弹出框简单分为alert和非alert

alert式弹出框

alert(message)方法用于显示带有一条指定消息和一个 OK 按钮的警告框

confirm(message)方法用于显示一个带有指定消息和 OK 及取消按钮的对话框

prompt(text,defaultText)方法用于显示可提示用户进行输入的对话框

看一下这个弹出框的js是怎么写的:

看起来似乎是alert式弹出框,那么直接用driver.switch_to.alert吗?先不急

非传统alert式弹出框的处理

弹出框位于div层,跟平常定位方法一样

弹出框是嵌套的iframe层,需要切换iframe

弹出框位于嵌套的handle,需要切换窗口

所以我们对这个弹出框进行元素审查

Python爬虫实战演示:破解验证码识别和弹窗处理

所以问题实际上很简单,直接定位按钮并点击即可

url = 'http://lims.gzzoc.com/client'driver = webdriver.Chrome()driver.get(url)time.sleep(1)driver.maximize_window() # 最大化窗口driver.find_element_by_xpath("//div[@class='jconfirm-buttons']/button").click()

获取图片位置并截图

二值法处理验证码的简单思路如下:

切割截取验证码所在的图片

转为灰度后二值法将有效信息转为黑,背景和干扰转为白色

处理后的图片交给文字识别引擎

输入返回的结果并提交

切割截取验证码的图片进一步思考解决策略:首先获取网页上图片的css属性,根据size和location算出图片的坐标;然后截屏;最后用这个坐标进一步去处理截屏即可(由于验证码js的特殊性,不能简单获取img的href后下载图片后读取识别,会导致前后不匹配)

img = driver.find_element_by_xpath('//img[@id="valiCode"]')time.sleep(1)location = img.locationsize = img.size# left = location['x']# top = location['y']# right = left + size['width']# bottom = top + size['height']left = 2 * location['x']top = 2 * location['y']right = left + 2 * size['width'] - 10bottom = top + 2 * size['height'] - 10driver.save_screenshot('valicode.png')page_snap_obj = Image.open('valicode.png')image_obj = page_snap_obj.crop((left, top, right, bottom))image_obj.show()

正常情况下直接使用注释的四行代码即可,但不同的电脑不同的浏览器,缩放倍率存在差异,因此如果截取出的图存在偏差这需要考虑乘上倍率系数。最后可以再加减数值进行微调

可以看到图片这成功截取出来了!

验证码图片的进一步处理

这个阈值需要具体用Photoshop或者其他工具尝试,即找到一个像素阈值能够将灰度图片中真实数据和背景干扰分开,本例经测试阈值为205

img = image_obj.convert("L")  # 转灰度图pixdata = img.load()w, h = img.sizethreshold = 205# 遍历所有像素,大于阈值的为黑色for y in range(h):    for x in range(w):        if pixdata[x, y] < threshold:            pixdata[x, y] = 0        else:            pixdata[x, y] = 255

根据像素二值结果重新生成图片

data = img.getdata()w, h = img.sizeblack_point = 0for x in range(1, w - 1):    for y in range(1, h - 1):        mid_pixel = data[w * y + x]        if mid_pixel < 50:            top_pixel = data[w * (y - 1) + x]            left_pixel = data[w * y + (x - 1)]            down_pixel = data[w * (y + 1) + x]            right_pixel = data[w * y + (x + 1)]            if top_pixel < 10:                black_point += 1            if left_pixel < 10:                black_point += 1            if down_pixel < 10:                black_point += 1            if right_pixel < 10:                black_point += 1            if black_point < 1:                img.putpixel((x, y), 255)            black_point = 0img.show()

图像处理前后对比如下

Python爬虫实战演示:破解验证码识别和弹窗处理

文字识别

将处理后的图片就给谷歌的文字识别引擎就能完成识别

result = pytesseract.image_to_string(img)# 可能存在异常符号,用正则提取其中的数字regex = '\d+'result = ''.join(re.findall(regex, result))print(result)

识别结果如下

提交账号密码、验证码等信息

在处理完验证码之后,现在我们就可以向网站提交账号密码、验证码等登陆所需信息

driver.find_element_by_name('code').send_keys(result)driver.find_element_by_name('userName').send_keys('xxx')driver.find_element_by_name('password').send_keys('xxx')# 最后点击确定driver.find_element_by_xpath("//div[@class='form-group login-input'][3]").click()

需要注意的是,二值法识别验证码成功率不是100%,因此需要考虑到验证码识别错误,需要单击图片更换验证码重新识别,可以将上述代码拆解成多个函数后,用如下循环框架试错

while True:    try:        ...        break    except:        driver.find_element_by_id('valiCode').click()

关于"Python爬虫中破解验证码识别和弹窗处理"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

验证 图片 处理 网站 文字 方法 阈值 干扰 爬虫 信息 像素 引擎 按钮 数字 灰度 篇文章 结果 背景 进一 不同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 有格互联网科技 西安纸贵互联网科技有限公司 科技互联网公司装修 互联网科技未来 互联网公司 科技公司 成都互联网科技公司 腾讯科技 互联网女皇 互联网科技类展会 山东吉时兔互联网科技有限公司 福州新华互联网科技学校 知乎 茂名市互联网科技产业园 浙江互联网科技研学营 宜昌元轩互联网科技有限公司 中国科技创新与世界互联网大会 中国互联网公司排名锤子科技 用友工业互联网科技发展 科技互联网的核心竞争力 广东工业互联网大赛深圳学泰科技 广州互联网高科技取餐柜 武汉亿视互联网科技有限公司 互联网巨头反垄断金融科技 广州互联网科技公司 狮子座互联网科技 恒生科技互联网指数分析 世界互联网科技公司市值排名 锡山区互联网智能科技产品供应 南通创西澳互联网科技有限公司 银川新华互联网科技学校是国营吗 现代互联网科技公司 互联网科技大佬云集
0