反爬虫机制与反爬虫技术(二)

反爬虫机制与反爬虫技术二

    • 1、动态页面处理与验证码识别概述
    • 2、反爬虫案例:页面登录与滑块验证码处理
      • 2.1、用例简介
      • 2.2、库(模块)简介
      • 2.3、网页分析
      • 2.4、Selenium准备操作
      • 2.5、页面登录
      • 2.6、模糊移动滑块测试
    • 3、滑块验证码处理:精确移动滑块
      • 3.1、精确移动滑块的原理
      • 3.2、滑块验证码图像缺口位置识别
      • 3.3、精确移动滑块实现(完整代码)


1、动态页面处理与验证码识别概述


本文接上篇:反爬虫机制与反爬虫技术(一)

上篇中,我们详细介绍和使用了User-Agent伪装、代理IP、请求频率控制等反爬虫技术,本篇将重点针对动态页面处理验证码识别进行介绍和案件详解

近年来,网站安全性越来越高,许多网站为了避免机器人恶意攻击,采用了滑动验证码。与传统的验证码相比,滑动验证码安全性更高,更难被攻击者破解。但是,这也给爬虫程序带来了困难。Python Selenium是一款非常出色的自动化测试工具,可以用来模拟浏览器行为,可以用于爬虫

例如,一些网站为了防止爬虫,使用了JavaScript来动态生成页面内容,这对于爬虫来说是一个挑战。Python中的Selenium库可以模拟浏览器的行为,执行JavaScript代码,从而获取动态生成的内容

例如在进行数据采集时,很多网站需要进行登录才能获取到目标数据,这时可以使用Selenium库进行模拟登录进行处理

另外,一些网站为了防止爬虫,会在登录或提交表单时添加验证码。随着反爬的不断发展,逐渐出现了更多复杂的验证码,例如:内容验证码、滑动验证码、图片拼接验证码等

Python提供了一些强大的图像处理库,例如Pillow、OpenCV等,可以用来自动识别验证码,从而实现自动化爬取

2、反爬虫案例:页面登录与滑块验证码处理

2.1、用例简介


本案例将以豆瓣的登录页面为例

豆瓣登录:https://accounts.douban.com/passport/login

操作步骤:

1) 打开豆瓣登录页面

2) 点击页面上的密码登录

3) 输入账号密码之后,点击登录豆瓣按钮

4) 点击登录后会弹出滑块验证码,拼接验证

在这里插入图片描述

2.2、库(模块)简介


Selenium是一种自动化测试工具,可以用于控制浏览器执行自动化操作,比如滑动验证码识别。滑动验证码通常是用于网站的登陆、注册等操作,通过鼠标模拟人手在滑动拼图或滑动滑块,达到人机交互的效果。在自动化测试中,如果能够识别滑动验证码,就可以实现完全自动化,提高效率

Selenium详解见文章:传送门

利用OpenCV、PIL等Python的图像处理识别库,可以在页面加载完成后,对验证码图片进行特征提取,然后通过算法自动计算出正确的滑块滑动位置,并模拟用户滑动

OpenCV详解见文章:传送门

本案例需要使用到的库(模块)如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains  # 动作类
from selenium.webdriver.support.wait import WebDriverWait  # 等待类
from selenium.webdriver.support import expected_conditions as EC  # 等待条件类
import time
import re
import numpy as np
import urllib.request as req
import cv2

2.3、网页分析


通过检查网页源代码,按照上述操作步骤进行操作,在HTML中找到用例需要使用到的一些元素

其中,点击登录按钮后,就会出现滑块验证区域,这是一个新增的iframe区域

在这里插入图片描述

2.4、Selenium准备操作


通过以下操作验证Selenium环境WebDriver是否正常:

# 打开自定义配置
options = webdriver.ChromeOptions()
# 设置浏览器不关闭(解决闪退/自动关闭)
options.add_experimental_option('detach', True)
# 禁用浏览器扩展
options.add_argument('--disable-extensions')
# 禁用浏览器弹窗
options.add_argument('--disable-popup-blocking')
# 设置浏览器UA
options.add_argument('--user-agent=Mozilla/5.0')# 声明浏览器对象
driver = webdriver.Chrome(options=options)# 最大化浏览器窗口
driver.maximize_window()# 打开豆瓣登录页
driver

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

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

相关文章

PyQt6简介

锋哥原创的PyQt6视频教程: 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计12条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话版…

企业远程访问业务系统:对比MPLS专线,贝锐蒲公英为何更优优势?

如今,企业大多都会采用OA、ERP、CRM等各种数字化业务系统。 私有云、公有云混合架构也变得越来越常见。 比如:研发系统部署在公司本地私有云、确保数据安全,OA采用公有云方案、满足随时随地访问需求。 如此一来,也产生了远程访问…

js实现图片懒加载

方式一:html实现 在img标签加上 loading"lazy" 方式二:js实现 通过js监听页面的滚动,实现的原理主要是判断当前图片是否到了可视区域: 拿到所有的图片 dom 。遍历每个图片判断当前图片是否到了可视区范围内。如果到了…

Maven项目下详细的SSM整合流程

文章目录 🎉SSM整合流程一、两个容器整合✨ 1、先准备好数据库config.properties连接、mybatis-config.xml🎊 2、容器一:优先配置spring.xml文件🎊 3、容器二:配置springMVC.xml文件🎊 4、Tomcat整合spring…

解释PCIe MSI 中断要求中断向量连续?PCIe 规范里并没有明确指出

MSI 向量必须连续? 前言 MSI 物理条件,MSI 中断产生的逻辑是RC初始化的时候,由软件将配置写入到 EP 的 2 个寄存器中,这两个寄存器一个指示的是地址 Message Address,一个指示的是数据 Message Data。当 EP 试图触发…

你再不学Git就来不及了!!!

其他系列文章导航 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 版本控制 什么是版本控制 为什么要版本控制 一、认识 Git 1.1Git 简史 1.2Git 与其他版本管理系统的主要区别 1.3Git 的三种状态 二、Git 使用快速入门 2.1获…

springboot使用redis缓存乱码(key或者 value 乱码)一招解决

如果查看redis中的值是这样 创建一个配置类就可以解决 package com.deka.config;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; i…

CPU+GPU多样化算力,ZStack Cloud助力游戏精酿核心业务上云

游戏精酿通过ZStack Cloud云平台提供高性能、高可用的云主机、云存储和云网络;前期通过超融合架构快速构建云基础设施,来支持Jira、Redis等关键业务;并实现对原有私有云平台业务的替代,按需将原有私有云业务滚动迁移到ZStack Clou…

深入理解Spring AOP的工作流程

文章目录 引言什么是AOP?Spring AOP的工作原理1. JDK动态代理2. CGLIB代理 Spring AOP的注解方式Aspect注解EnableAspectJAutoProxy注解 Spring AOP的工作流程拓展应用1. 自定义注解2. 异常处理3. 切面优先级 结论 🎉深入理解Spring AOP的工作流程 ☆* o…

关于运行软件程序出现vcruntime140.dll丢失的修复教程-解决方案

vcruntime140.dll是Microsoft Visual C库文件的一部分,用于支持Windows操作系统上的应用程序。如果找不到或丢失了这个文件,可能会导致某些应用程序无法正常运行。下面是关于vcruntime140.dll丢失的5个修复方法,以及vcruntime140.dll文件属性…

Python基础教程之分支结构详解

文章目录 一、分支结构二、单分支结构三、双分支结构四、多分支结构五、嵌套分支结构六、三元表达式七、条件测试关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③P…

python之pyqt专栏2-项目文件解析

项目结构 在上一篇文章python之pyqt专栏1-环境搭建,创建新的pyqt项目,下面我们来看一下这个项目下的文件。 从下面的文件结构图可以看到,该项目下有3个文件,untitled.ui,untitled.py 以及main.py。 QtDesigner可以UI界面的方式&am…

Feign接口请求返回异常 no suitable HttpMessageConvert found for response type

问题场景&#xff1a; 后端调用feign接口请求, 接口返回异常, no suitable HttpMessageConvert found for response type 问题描述 报错异常如下&#xff1a; //根据图片特征 去查询人员信息ResultVo<List> personVos ipbdFaceLibPersonApi.queryFacePersonByFeatur…

华为云之SFS弹性文件服务使用体验

华为云之SFS弹性文件服务使用体验 一、本次实践介绍1.1 实践环境简介1.2 本次实践目的 二、SFS弹性文件服务介绍2.1 SFS弹性文件服务简介2.2 SFS弹性文件服务特点 三、购买ECS弹性云服务器3.1 购买ECS弹性云服务器3.2 查看ECS弹性云服务器状态3.3 远程连接ECS3.4 检查操作系统版…

Unity Android FireBase bugly报错查询

报错如下图&#xff0c;注意&#xff0c;标红的三处 使用的il2cpp和架构是arm64-v8a 那我们就可以根据这些去找对应的符号表&#xff0c;在unity安装目录下 Unity2020.3.33f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Symbols\arm64-v8a 找到l…

Tomcat注册为服务后,如何配置Tomcat内存大小

前提条件&#xff1a;tomcat已经注册为服务。 1.winR,输入regedit打开注册表 2.找到Tomcat注册表路径&#xff1a; HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\Tomcat80603.找到jvm内存配置路径&#xff1a; HKEY_LOCAL_MACHINE\SOFTW…

SSM大学生社团信息管理系统-99953,(免费领取源码)计算机毕业设计选题开题+程序定制+论文书写+答辩ppt书写 包售后 全流程

SSM大学生社团信息管理系统APP 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;高校当然也不能排除在外。大学生社团信息管理系统APP是以实际运用为开发背景&#xff0c…

[C/C++]数据结构 循环队列

前言: 队列是一种具有先进先出特性的结构,但是当数据出队列以后,前面的空间就无法再次利用了,循环队列就可以解决这个问题 一:概念及结构: 1.循环队列概念 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队…

IDEA、PHPSTORM 在命令行中进行 PHP debug

然在终端执行控制器的方法php yii test/ab 即可看到触发debug 调试

视频剪辑技巧:多个视频合并新篇章,高效视频剪辑,创造无限可能

在数字媒体时代&#xff0c;视频剪辑已经成为一项重要的技能。多个视频合并是一种将多个视频片段合并成一个完整视频的技巧。这种技巧可以将不同的视频片段组合在一起&#xff0c;制作出独特且具有吸引力的视频内容。现在一起操作下云炫AI智剪如何批量合并视频的操作吧。 一、准…