盘点一个Python网络爬虫过验证码的问题(方法一)

news2024/9/22 4:05:12

点击上方“Python爬虫与数据挖掘”,进行关注

回复“书籍”即可获赠Python从入门到进阶共10本电子书

低眉信手续续弹,说尽心中无限事。

大家好,我是皮皮。

一、前言

前几天在Python最强王者群【鶏啊鶏。】问了一个Python网络爬虫的问题,这里拿出来给大家分享下。

1123ab7e35d78e7d4e518c164b6d18ef.png

下面是他的代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from PIL import Image
import ddddocr

ocr = ddddocr.DdddOcr()

options = webdriver.ChromeOptions()
options.add_argument('user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36')
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=options)

# 打开目标网页
driver.get('https://sol.sinosure.com.cn')
time.sleep(5)
driver.maximize_window()
# 定位验证码图片元素并模拟鼠标悬停以加载图片
yanzhengma = driver.find_element(By.CSS_SELECTOR, '.pass-form-item.pass-form-item-code')
captcha_element = yanzhengma.find_element(By.CSS_SELECTOR,  '.pass-label-img')
webdriver.ActionChains(driver).move_to_element(captcha_element).perform()
time.sleep(5)

# 获取验证码图片元素的位置和大小
location = captcha_element.location
size = captcha_element.size
print(location)
print(size)
# 截取整个网页的截图
driver.save_screenshot('screenshot.png')

# 根据验证码图片元素的位置和大小,从整个网页截图中裁剪出验证码图片
left = int(location['x'])
top = int(location['y'])
right = int(location['x'] + size['width'])
bottom = int(location['y'] + size['height'])
captcha_screenshot = Image.open('screenshot.png').crop((left, top, right, bottom))
print(left)
print(top)
print(location)
print(bottom)
# 保存裁剪后的验证码图片,并进行识别
captcha_screenshot.save('captcha.png')
with open('captcha.png', 'rb') as f:
    img_bytes = f.read()
res = ocr.classification(img_bytes)
print('识别的验证码是:' + res)

基本思路是没啥问题的,确实也是可以拿到对应界面的截图,只不过是验证码的位置截取出现了点偏差,导致验证码没正确识别到。

ad61e4c193257d07ca8f04df50c8be90.png

下面这个代码是获取验证码图片元素的位置和大小:

location = captcha_element.location
size = captcha_element.size

这个部分我看介绍应该是会返回定位的元素位置,我刚刚大致拖拉了一下在裁剪前的定位打印出来确实就已经去了输入密码附近的位置了 但是我定位的元素是验证码的地方,并且我也尝试了先定位验证那个位置的大元素再定位至具体的验证码图片位置  问题依旧。

上面是粉丝的疑惑,下面一起来看看解决办法。

二、实现过程

这里【魏哥】尝试了下代码,但是出现下图报错:

3869a636a741b81b011053f5f551be7c.png

这个报错还是蛮常见的,对于时常使用sel的人来说,这个报错算是家常便饭了,报错的原因是本地浏览器驱动和谷歌浏览器的版本不匹配,需要更换本地浏览器驱动。

关于这个问题的解决方法,就是去网页下载对应浏览器版本的对应驱动,放到本地指定文件夹,确保该文件夹路径有加入环境变量。该问题的解决办法公众号历史文章也有提及,网上的解决教程也一大堆,这里不再赘述。

87e2419f284b52e4f8078d7e81da78ea.png

言归正传,继续回到这个问题的解决办法。这里【甯同学】给了一个思路,直接找到 验证码的图片的url 用requests 请求 验证码的.content 用 ocr.classification(验证码的.content) 就可以了 不用保存图片 在open读取二进制流,代码如下所示:

7b2241a315fcceb7460095efdd8149e1.png

顺利地解决了粉丝的问题,如果对requests和Beautiful还不熟悉的小伙伴,可能接受起来就比较困难一些。

这里只是给出了其中一个方法,另外的一个方法,一起看下一篇文章,敬请期待!

三、总结

大家好,我是皮皮。这篇文章主要盘点了一个Python网络爬虫过验证码的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

最后感谢粉丝【鶏啊鶏】提问,感谢【甯同学】、【魏哥】给出的思路和代码解析,感谢【Ineverleft】等人参与学习交流。

【提问补充】温馨提示,大家在群里提问的时候。可以注意下面几点:如果涉及到大文件数据,可以数据脱敏后,发点demo数据来(小文件的意思),然后贴点代码(可以复制的那种),记得发报错截图(截全)。代码不多的话,直接发代码文字即可,代码超过50行这样的话,发个.py文件就行。

26ea3e0ded5bd234d361919099d97dda.png

大家在学习过程中如果有遇到问题,欢迎随时联系我解决(我的微信:pdcfighting1),应粉丝要求,我创建了一些高质量的Python付费学习交流群和付费接单群,欢迎大家加入我的Python学习交流群和接单群!

7a65f7efd22b3e51d2ef16b8fef4fc6e.png

小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

c8fc4472448ceecad5ce164f582daa6f.jpeg

------------------- End -------------------

往期精彩文章推荐:

  • if a and b and c and d:这种代码有优雅的写法吗?

  • Pycharm和Python到底啥关系?

  • 都说chatGPT编程怎么怎么厉害,今天试了一下,有个静态网页,chatGPT居然没搞定?

  • 站不住就准备加仓,这个pandas语句该咋写?

b3b302cf94b499ad4130de9d9a649c3e.png

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

想加入Python学习群请在后台回复【入群

万水千山总是情,点个【在看】行不行

/今日留言主题/

随便说一两句吧~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/673829.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SSH连接异常:从迷茫到石破天惊的解决之道

文章目录 零:前言一:SSH1.1 SSH的连接类型、方式和端口1.2 常见端口及其类型 二:解决SSH连接异常第一步:欣赏报错,顺藤摸瓜第二步:异常窥探,摸石过河第三步:问题确定,斩首…

测试技术体系

目录: 软件测试分类分层测试体系 1.软件测试分类 软件测试的分类_安全性测试属于功能测试吗_阿瞒有我良计15的博客-CSDN博客 1.单元测试(Unit Testing):单元测试是指对软件的最小可测试单元进行测试,例如一个函数、一…

Cell — 新“出芽”方法为疫苗开发带来优势

在疫苗学中,基于mRNA向体内递送抗原编码基因同基于纳米颗粒向体内递送抗原在应对具有挑战性的病原体方面都显示出巨大的前景。本期的《Cell》中,Hoffmann等人将两种方法相结合,通过调节被许多病毒劫持的相同细胞代谢通路来增强SARS-CoV-2疫苗…

【UCOS-III】自我学习笔记→第27讲→优先级翻转

文章目录 前言实验步骤1.复制二值信号量工程,添加task2和task3,修改任务服务函数名称2.修改开始任务,任务1以及任务2、3的内容3.查看串口现象![在这里插入图片描述](https://img-blog.csdnimg.cn/efa5ee2d92b54fe8be5a419adcf92ead.png) 测试…

STM32速成笔记—DMA

文章目录 一、什么是DMA二、DMA有什么作用三、STM32的DMA3.1 DMA请求3.2 DMA通道3.3 仲裁器 四、DMA配置4.1 DMA配置步骤4.2 DMA结构体成员 五、DMA配置程序5.1 ADC1初始化程序5.2 DMA初始化程序 一、什么是DMA DMA全程Direct Memory Access,即直接存储器访问。简单…

如何保护阿里云服务器免受DDoS攻击和恶意访问?有哪些防护措施?

如何保护阿里云服务器免受DDoS攻击和恶意访问?有哪些防护措施?   [本文由阿里云代理商[聚搜云]撰写]   随着互联网技术的不断发展,网络安全问题日益严峻,保护服务器免受DDoS攻击和恶意访问成为了每个企业和网站建设者的关注重…

W3B x Sui Hacker House|深入了解Sui和Move语言

Web3 Builders(W3B)作为Hacker House的践行者,将于6月23日(周五)早上8点(GMT8)举办首期 W3B x Sui Hacker House 系列活动分享会。本期活动邀请到Sui联合创始人Sam Blackshear(Move语…

【机器学习】机器学习的基本概念

机器学习是我们现在接触人工智能领域首先要去掌握的知识,下面是我学习记录的一些关于机器学习的基础、常见的概念和定义。 目录 机器学习定义 机器学习过程 假设关系 训练数据 损失函数(正向传播) 优化(反向传播&#xff0…

PC市场:寒冬敲响警钟,蓄势待发的复兴之路

近年来,PC市场的增长确实放缓,但这并不意味着它已经进入了寒冬。相反,PC市场正在蓄势待发,寻找复兴之路。 首先,PC市场仍然是一个巨大的市场。尽管移动设备的普及使得一些用户更多地使用手机和平板电脑,但…

C++:虚函数

C面向对象的三个特性,封装继承多态。在继承的关系中,所有的东西都可以被继承下来,如数据可以被继承下来在内存,而函数的继承则是继承调用权。 虚函数主要是通过虚函数表来实现,每个类都有自己的虚表,当你创…

RevCol:大模型架构设计新范式,给神经网络架构增加了一个维度!

点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 公众号ID|计算机视觉研究院 学习群|扫码在主页获取加入方式 论文地址:https://arxiv.org/pdf/2212.11696.pdf 项目代码:https://github.com/megvii-research/RevCol 计…

把金融航母开进智能峡湾,总共分几步?

试想一下,有这么一家街头小店。夫妻两个勤奋经营,诚信待客,广受街里街坊的欢迎。他们流水稳定,蒸蒸日上,商业信誉很好,甚至是非物质文化遗产的传承者。这样一家店,在扩大经营,拓展业…

SpringBoot集成WebSocket实现消息实时推送(提供Gitee源码)

前言:在最近的工作当中,客户反应需要实时接收消息提醒,这个功能虽然不大,但不过也用到了一些新的技术,于是我这边写一个关于我如何实现这个功能、编写、测试到部署服务器,归纳到这篇博客中进行总结。 目录 …

C语言代码函数栈帧的创建与销毁(修炼内功)

目录 在前期的学习中我们可能有很多困惑 例如:局部变量是怎么创建的 为什么局部变量的值是随机值 函数是怎么样传参的 传参的顺序是什么 形参和实参的关系是什么 函数调用是怎么做的 函数掉调用结束后怎么返回的 这篇博客我们来修炼自己的内功,掌握好这篇…

【MATLAB第42期】基于MATLAB的贝叶斯优化决策树分类算法与网格搜索、随机搜索对比,含对机器学习模型的评估度量介绍

【MATLAB第42期】基于MATLAB的贝叶斯优化决策树分类算法与网格搜索、随机搜索对比,含对机器学习模型的评估度量介绍 网格搜索、随机搜索和贝叶斯优化是寻找机器学习模型参数最佳组合、交叉验证每个参数并确定哪一个参数具有最佳性能的常用方法。 一、 评估指标 1、…

STM32F103基于HAL工程挂载FatFS驱动SD卡

STM32F103基于HAL工程挂载FatFS驱动SD卡 📌基于标准库驱动《STM32挂载SD卡基于Fatfs文件系统读取文件信息》 🎬驱动实验效果: 🔨通过STM32cubemx配置SPI1作为访问SD、TF卡通讯方式。 🔧在STM32cubemx配置中挂载中…

Scala入门【变量和数据类型】

目录 Scala基本认知 Hello Scala 方法的定义 伴生对象 Java: Scala: 2、变量和数据类型 2.1、注释 2.2、变量和常量 Java中的变量和常量 Scala基本语法 2.3、标识符 2.4、字符串 基本语法 2.5、标准输入输出 基本语法 2.6、文件的读写 …

6-8 二分查找

今天是端午节,祝大家端午节快乐~ 竟然这样,还不点点赞。 言归正传┏ (゜ω゜)☞ 目录 引入 二分查找算法思想 时间复杂度O(logN) 二分查找算法描述 二分查找算法的框架如下: 例题1: 例题2&#x…

秒懂SpringBoot之如何集成SpringDoc(全网目前最新最系统最全面的springdoc教程)

[版权申明] 非商业目的注明出处可自由转载 出自:shusheng007 文章目录 概述概念解释SpringDoc使用简单集成配置文档信息配置文档分组使用注解TagOperationSchemaParameterParametersApiResponses 和ApiResponse 认证授权无需认证需要认证 总结源码 概述 近来颇为懈…

13. WebGPU 正交投影

在上一篇文章中,讨论了矩阵的工作原理。讨论了如何通过 1 个矩阵和一些神奇的矩阵数学来完成平移、旋转、缩放,甚至从像素到裁剪空间的投影。实现 3D 操作 只需要再向前迈一小步。 在之前的 2D 示例中,将 2D 点 (x, y) 乘以 3x3 矩阵。要实现…