网站首页 > 文章精选 正文
一、前言
前几天一个粉丝【鶏啊鶏】问我一个Python数据采集的问题,需求如下:
想写一个脚本能自动采集下载当天发布的这个页面的这几个免费报告,能保存成这个标题的pdf文件,网站是手机号注册就能下载这些文件的,就是在我注册登录状态下,能采集下载。
下面是他的代码:
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)
基本思路是没啥问题的,确实也是可以拿到对应界面的截图,只不过是验证码的位置截取出现了点偏差,导致验证码没正确识别到。
这个部分我看介绍应该是会返回定位的元素位置,我大致拖拉了一下在裁剪前的定位,打印出来确实就已经去了输入密码附近的位置了,但是我定位的元素是验证码的地方,并且我也尝试了先定位验证那个位置的大元素再定位至具体的验证码图片位置,问题依旧。
二、实现过程
这里强哥尝试了下代码,但是出现下图报错:
这个报错还是蛮常见的,对于时常使用sel的人来说,这个报错算是家常便饭了,报错的原因是本地浏览器驱动和谷歌浏览器的版本不匹配,需要更换本地浏览器驱动。
关于这个问题的解决方法,就是去网页下载对应浏览器版本的对应驱动,放到本地指定文件夹,确保该文件夹路径有加入环境变量。
言归正传,继续回到这个问题的解决办法。这里【甯同学】给了一个思路,直接找到 验证码的图片的url 用requests 请求 验证码的.content 用 ocr.classification(验证码的.content) 就可以了 不用保存图片 在open读取二进制流,代码如下所示:
顺利地解决了粉丝的问题,如果对requests和Beautiful还不熟悉的小伙伴,可能接受起来就比较困难一些。
三、总结
大家好,我是强哥。这篇文章主要盘点了一个Python网络爬虫过验证码的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。
大家在学习Python的过程中难免会遇到各种问题,网上的资料鱼龙混杂,难以真正解决问题。应粉丝要求,强哥我这里有高质量的Python学习资料和兼职接单群!
1、我会给你提供Python学习资料 (Python基础,Python网络爬虫,Python数据分析),提供详细答疑(响应速度很快) ,有问必答,不懂的Python问题随便问
2、不定期发布互联网求职招聘信息
3、关于就业、抉择、买房等人生事情,也都可以咨询我,知无不言言无不尽,近距离与我沟通,给你建设性的建议,让你少走弯路。
4、不定期发布Python相关的外快单子,有爬虫,数据分析,数据处理,数据可视化,机器学习,学生作业,web开发等外快单子,价格在几百元、几千元甚至上万的单子都有,看你能力接单。
小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。
最后,感兴趣的朋友欢迎后台发“学习资料”就可以啦!
- 上一篇: 如何通过python自动校验网站验证码
- 下一篇: 简单识别验证码,无复杂步骤,不依赖第三方模块
猜你喜欢
- 2025-03-23 如何使用Python实现账号以及密码的自动登录
- 2025-03-23 python中用于密码加密的库passlib
- 2025-03-23 python爬虫之哈希算法,js、python不同哈希算法的实现
- 2025-03-23 我的第四个项目:Python自动生成密码
- 2025-03-23 Python 3 加密简介(python 程序加密)
- 2025-03-23 「2022 年」崔庆才 Python3 爬虫教程 - 深度学习识别滑动验证码缺口
- 2025-03-23 Python每日一库之requests(python的requests安装)
- 2025-03-23 学习python怎么能没有练手项目呢?诺,给你70个拿去玩,附教程
- 2025-03-23 国外友人开创Python模拟登陆神库,完美修改它为咱们所用
- 2025-03-23 python+selenium做ui自动化测试用法必会
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)