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

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

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

    • 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.kler.cn/a/147324.html

相关文章:

  • java小练习
  • 要查看你的系统是 x64(64位)还是 x86(32位),可以按照以下步骤操作
  • 深度学习中的Pixel Shuffle和Pixel Unshuffle:图像超分辨率的秘密武器
  • go 集成swagger 在线接口文档
  • 利用Blackbox AI让编程更轻松
  • Spring Boot3 实战案例合集上线了
  • 【ISP】噪声--sensor(2)
  • DS二叉树--赫夫曼树解码/最优二叉树【数据结构】
  • acwing算法基础之动态规划--背包问题
  • 【服务器能干什么】搭建一个短网址平台,可以查看数据详情!
  • Java的buffer.flip()是个什么东西?
  • XML Schema中的attributeFormDefault
  • el-row el-col书写不规范的问题,会换行
  • 奖学金问题
  • Ansible的module_defaults
  • 深兰科技“汉境”入选2023年湖北省人工智能十大优秀应用案例
  • 实时云渲染简要分析
  • Python爬虫入门课: 如何实现数据抓取 <文字 图片 音频 视频 文档..>
  • 通过JDBC连接MySQL实现表的插入和查看语句
  • IDEA断点调试
  • 双通道 12V 直流电机驱动芯片GC8548,12V,大电流,具有短地短电源保护功能,可替代LV8548/LV8549/ONSEMI
  • 浙江启用无人机巡山护林模式,火灾扑救效率高
  • uni-app 离线打包安卓Apk(小白上手)
  • Altium Designer学习笔记13
  • 初学Flink 学后总结
  • MYSQL基础知识之【添加数据,查询数据】