当前位置: 首页 > news >正文

python爬虫登录校验之滑块验证、图形验证码(OCR)

在爬虫过程中,验证码和滑块验证是常见的反爬措施。针对这些挑战,通常采用OCR识别图形验证码和模拟滑块拖动来处理滑块验证。以下是如何处理这两种类型验证的详细方法。

1. 图形验证码(OCR)

a. 使用 tesserocrPillow 处理图形验证码

tesserocr 是基于 Tesseract OCR 引擎的 Python 封装,常用来识别简单的图形验证码。如果验证码不太复杂,可以用它来识别文本。

步骤:
  1. 安装依赖:

    pip install tesserocr pillow
    

  2. 验证码处理示例:

import re
import tesserocr
from PIL import Image
from io import BytesIO
from selenium import webdriver# 预处理验证码图像
def preprocess(image):image = image.convert('L')  # 转换为灰度图像image = image.point(lambda x: 0 if x < 140 else 255)  # 二值化处理return image# 打开浏览器并获取验证码
browser = webdriver.Chrome()
browser.get('https://captcha7.scrape.center/')  # 更换为你的验证码页面captcha_element = browser.find_element_by_css_selector('#captcha')
captcha_image = Image.open(BytesIO(captcha_element.screenshot_as_png))# 图像预处理
processed_image = preprocess(captcha_image)# OCR识别验证码
captcha_text = tesserocr.image_to_text(processed_image)
captcha_text = re.sub(r'\W', '', captcha_text)  # 移除非字母数字字符
print('识别的验证码:', captcha_text)browser.quit()
b. 如果验证码非常复杂,可能需要:
  • 更好的图像预处理(如降噪、去除背景)。
  • 使用机器学习模型来识别复杂验证码。

2. 滑块验证

滑块验证是一种基于用户拖动操作的验证形式,通常在登录、注册等过程中遇到。可以使用 Selenium 模拟滑动操作,并且通过 ActionChains 实现拖拽效果。

滑块验证的步骤:
  1. 定位滑块和拖动轨道
  2. 模拟拖动动作(通过ActionChains模拟滑动轨迹)。
代码示例:
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By# 初始化浏览器
browser = webdriver.Chrome()
browser.get('https://example.com')  # 替换为有滑块验证的网页# 等待加载完成并找到滑块
time.sleep(2)  # 等待页面加载
slider = browser.find_element(By.CSS_SELECTOR, '.slider-button')  # 滑块选择器
slider_track = browser.find_element(By.CSS_SELECTOR, '.slider-track')  # 滑动轨道选择器# 模拟拖动滑块
action = ActionChains(browser)# 拖动操作,假设滑动距离为轨道宽度
action.click_and_hold(slider).perform()
action.move_by_offset(300, 0).perform()  # 300是大致的滑动距离,可能需要动态计算
action.release().perform()# 模拟滑动后等待验证
time.sleep(2)browser.quit()
c. 滑动轨迹的处理:
  • 滑动轨迹可以通过计算滑块轨道的宽度或者通过图像处理找到滑块的终点。
  • 滑块验证往往不仅要求完成动作,还要求模拟人类的行为(加速、减速,非匀速滑动),否则可能会失败。

滑动行为模拟:

import random
import time# 生成随机滑动轨迹
def generate_track(distance):track = []current = 0mid = distance * 4 / 5t = 0.2v = 0while current < distance:if current < mid:a = 2else:a = -3v0 = vv = v0 + a * tmove = v0 * t + 1 / 2 * a * t * tcurrent += movetrack.append(round(move))return track# 使用 ActionChains 模拟拖动
def simulate_dragging(browser, slider, distance):track = generate_track(distance)action = ActionChains(browser)action.click_and_hold(slider)for x in track:action.move_by_offset(xoffset=x, yoffset=0)action.release().perform()slider = browser.find_element(By.CSS_SELECTOR, '.slider-button')
simulate_dragging(browser, slider, 300)

这个代码生成的滑动轨迹会有加速和减速,模拟人类操作。

总结:

  • 图形验证码:使用 tesserocr 结合预处理来识别简单的验证码;如果验证码复杂,可以使用机器学习。
  • 滑块验证:使用 SeleniumActionChains 模拟拖动操作,并生成人类模拟的轨迹避免被检测为机器操作。

如果验证码或滑块验证过于复杂,可以考虑使用打码平台(如 Ruokuai、2Captcha)来自动识别验证码和滑块验证。

相关文章:

python爬虫登录校验之滑块验证、图形验证码(OCR)

在爬虫过程中&#xff0c;验证码和滑块验证是常见的反爬措施。针对这些挑战&#xff0c;通常采用OCR识别图形验证码和模拟滑块拖动来处理滑块验证。以下是如何处理这两种类型验证的详细方法。 1. 图形验证码&#xff08;OCR&#xff09; a. 使用 tesserocr 和 Pillow 处理图形…...

(一)Python程序结构

1、Python写模块 使用缩进分层来写模块&#xff1b; 2、缩进规范 最好使用同一种缩进方式&#xff0c;统一使用tab或者空格键&#xff1b; 3、换行符&#xff1a;\n&#xff1b; print("窗前明月光\n疑似地上霜") 4、续行符号&#xff1a;\&#xff1b; 注意1…...

二叉树——相同的树

还是应用递归的思想&#xff0c;将这个问题拆分为三个部分&#xff0c;第一&#xff1a;当两棵树均为空树&#xff0c;或者访问到最后的子树时均为空树时&#xff0c;则返回true。第二&#xff1a;当两棵树中其中一棵树为空树&#xff0c;另一棵树不是空树&#xff0c;证明两棵…...

探秘 1688 商品详情接口:高并发批量采集的实战攻略

在进行 1688 商品详情接口批量采集并考虑高并发使用时&#xff0c;你可以从以下几个方面着手&#xff1a; 一、技术选型 选择合适的编程语言和框架&#xff1a;例如 Python 的 Scrapy 框架或者 Java 的 Spring Boot 结合相关爬虫库等&#xff0c;这些工具可以帮助你高效地实现…...

【C语言】sizeof

tmp_buf = (char *)malloc(size)不可以直接使用`sizeof`来查看动态分配内存的大小。在C语言中,`sizeof`操作符是在编译时确定类型或对象的大小,并不能用于动态获取malloc分配的内存大小。 下面解释为什么不能用`sizeof(tmp_buf)`查看动态分配的内存大小: 1. 编译时 vs 运行时…...

2024-10-15 问AI: [AI面试题] 人工智能中使用了哪些不同的搜索算法?

文心一言 人工智能中使用了多种不同的搜索算法来解决问题&#xff0c;这些算法各有特点&#xff0c;适用于不同的场景和问题类型。以下是一些常见的人工智能搜索算法&#xff1a; 深度优先搜索&#xff08;DFS&#xff09;&#xff1a; 是一种基于树或图的搜索算法。核心思想是…...

2024 年 04 月编程语言排行榜,PHP 排名创新低?

编程语言的流行度总是变化莫测&#xff0c;每个月的排行榜都揭示着新的趋势。2024年4月的编程语言排行榜揭示了一个引人关注的现象&#xff1a;PHP的排名再次下滑&#xff0c;创下了历史新低。这种变化对于PHP开发者和整个技术社区来说&#xff0c;意味着什么呢&#xff1f; P…...

Element中el-table组件设置max-height右侧出现空白列的解决方法

之前就出现过这个情况&#xff0c;没理过&#xff0c;因为不影响啥除了不美观...但今天看着实在是难受&#xff0c;怎么都不顺眼(可能是我自己烦躁--) 试了很多网上的方法&#xff0c;都不得行&#xff0c;后面发现了这篇文章&#xff0c;解决了! 感谢&#xff01; Element中t…...

unity学习-全局光照(GI)

在全局光照&#xff08;Lighting&#xff09;界面有两个选项 Realtime Light&#xff08;实时光照&#xff09;&#xff1a;在项目中会提前计算好光照以及阴影的程序&#xff0c;当你需要调用实时全局光照的时候会将程序调用出来使用 Mixed Light&#xff08;烘焙光照&#x…...

记录Centos7 漫漫配置路

记录Centos7 漫漫配置路 一、 配置源二、 clinfo三、 PCL 配置1. 依赖2. eigen3. boost4. flann5. pcl 四、YAML-CPP五、 miniconda 安装 python3.6 和 pytorch六、libbot 配置1. 容易安装的依赖2. 需要源码安装的依赖3. [libbot](https://github.com/libbot2/libbot2) 简单地说…...

论文 | OpenICL: An Open-Source Framework for In-context Learning

主要内容&#xff1a; 2. 提供多种 ICL 方法&#xff1a; 3. 完整的教程&#xff1a; 4. 评估和验证&#xff1a; 背景&#xff1a; 随着大型语言模型 (LLM) 的发展&#xff0c;上下文学习 (ICL) 作为一种新的评估范式越来越受到关注。问题&#xff1a; ICL 的实现复杂&#xf…...

尚硅谷rabbitmq 2024 Federation配置 第60节答疑

rabbitmq联邦队列怎么做 要在 RabbitMQ 中设置联邦队列&#xff08;Federated Queues&#xff09;&#xff0c;你需要遵循以下步骤。联邦队列允许你在不同的 RabbitMQ 实例之间共享队列&#xff0c;从而实现消息的分布式处理和高可用性。 ### 步骤 1&#xff1a;安装 RabbitMQ…...

Ubuntu编译MySQL驱动连接QT

1、安装MySQL 安装MySQL软件以及驱动。 sudo apt-get install mysql-serversudo apt install mysql-clientsudo apt-get install libmysqlclient-dev 2、编译qmysql驱动 2.1、修改mysql.pro 找到Qt源码中的mysql.pro项目文件&#xff0c;一般位于&#xff1a;/opt/Qt/5.15…...

时间序列预测(七)——梯度消失(Vanishing Gradient)与梯度爆炸(Exploding Gradient)

目录 一、定义 二、产生原因 三、解决方法&#xff1a; 梯度消失与梯度爆炸是深度学习中常见的训练问题&#xff0c;它们主要发生在神经网络的反向传播过程中&#xff0c;使得模型难以有效学习。 一、定义 1、梯度消失&#xff08;Vanishing Gradient&#xff09;&#xf…...

ARM assembly 12: GCD(最大公约数)计算

首先&#xff0c;我们看看GCD(Greatest Common Divisor)的CPP实现 int gcd(int a, int b) {if(b 0) return a;return gcd(b, a%b); }基于下面的gcd.s文件&#xff0c;我们尝试实现gcd函数 //gcd.s .global main .extern fopen, fprintf, fclose, printf, atoi.section .dat…...

「实战应用」如何用图表控件LightningChart可视化天气数据?(一)

LightningChart.NET完全由GPU加速&#xff0c;并且性能经过优化&#xff0c;可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D&#xff0c;高级3D&#xff0c;Polar&#xff0c;Smith&#xff0c;3D饼/甜甜圈&#xff0c;地理地图和GIS图表以及适用于科学…...

基于深度学习的细粒度图像分析综述【翻译】

&#x1f947; 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 &#x1f389; 声明: 作为全网 AI 领域 干货最多的博主之一&#xff0c;❤️ 不负光阴不负卿 ❤️ 文章目录 基础信息0 摘要1 INTRODUCTION2 识别与检索 RECOGNITION VS. RETRIEVAL3 问题和…...

yolo笔记

目录 Anaconda安装Pytorchyolov5下载部署labelimg安装 Anaconda安装 官网链接 https://www.anaconda.com/ 官网链接链接: 官网链接https://www.anaconda.com/ 直接下最新版 (网站会自动检测系统&#xff0c;我是在Windows环境截图的) bash Anaconda3-XXXX-Linux-x86_64.sh一…...

Android平台RTSP|RTMP播放器PK:VLC for Android还是SmartPlayer?

好多开发者&#xff0c;希望在Android端低延迟的播放RTMP或RTSP流&#xff0c;本文就目前市面上主流2个直播播放框架&#xff0c;做个简单的对比。 VLC for Android VLC for Android 是一款功能强大的多媒体播放器&#xff0c;具有以下特点和功能&#xff1a; 广泛的格式支持…...

IDEA下面的Services不见了(解决方案)

大家使用IDEA有时候新打开个项目这个东西不会自动出现如何解决 配置方法&#xff1a; 右上角打开进入Edit Configurations 进入后我们看到里面是没有SpringBoot相关内容的 点击加号选择SpringBoot 然后Apply Ok即可&#xff0c;现在IDEA下面就会出现Service了&#xff0c;打…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

Vue3中的computer和watch

computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...

GAN模式奔溃的探讨论文综述(一)

简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...

【版本控制】GitHub Desktop 入门教程与开源协作全流程解析

目录 0 引言1 GitHub Desktop 入门教程1.1 安装与基础配置1.2 核心功能使用指南仓库管理日常开发流程分支管理 2 GitHub 开源协作流程详解2.1 Fork & Pull Request 模型2.2 完整协作流程步骤步骤 1: Fork&#xff08;创建个人副本&#xff09;步骤 2: Clone&#xff08;克隆…...

当下AI智能硬件方案浅谈

背景&#xff1a; 现在大模型出来以后&#xff0c;打破了常规的机械式的对话&#xff0c;人机对话变得更聪明一点。 对话用到的技术主要是实时音视频&#xff0c;简称为RTC。下游硬件厂商一般都不会去自己开发音视频技术&#xff0c;开发自己的大模型。商用方案多见为字节、百…...