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

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

    • 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) 点击登录后会弹出滑块验证码,拼接验证

反爬虫机制与反爬虫技术(二)_第1张图片

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张图片

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

你可能感兴趣的:(#,自动化,#,网络爬虫,#,Python,爬虫,opencv,selenium,自动化)