2021/7/3爬虫第三十二次课(反反爬措施二之突破行为验证,opencv)

本文主要是介绍2021/7/3爬虫第三十二次课(反反爬措施二之突破行为验证,opencv),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 一、图形验证码(实现上次的12306突破验证码)
    • 二、​opencv简单使用(这里用了其美化照片功能)
    • 三、行为验证
    • 四、拓展

一、图形验证码(实现上次的12306突破验证码)

12306图片验证码的实现
​
解决方案: selenium(鼠标行为链) + 打码平台
​
思路:
通过selenium来加载登录页面,获取验证码图片。我就可以把验证码图片交给超级鹰打码平台进行处理。让其给我返回这张验证码正确的坐标值。拿到正确的坐标值之后去点击图片
​
实现步骤
第一步 使用selenium加载登录页面
第二步 对页面进行保存(截屏,通过selenium)
第三步 截取12306图片验证码 (通过selenium)
第四步 交给超级鹰打码平台进行识别 返回正确的坐标值
第五步 根据正确的坐标值进行点击

补充:
from PIL import Image:可以保存图片,截取图片
重点源代码:

1.裁剪部分需要包含4个坐标的元组
# 进行对12306图片验证码的裁剪
# 1 定位图片
code_img_element = driver.find_element_by_class_name('imgCode')#img标签
# 2 获取图片的左上角坐标值
location = code_img_element.location # location返回值是个字典 左上角坐标值
# 3 获取图片的宽和高
size = code_img_element.size # size也是一个字典 图片的宽和高
# 4 获取左上角和右下角的坐标值(元组)
rangle = (int(location['x']),int(location['y']),int(location['x']+size['width']),int(location['y']+size['height']))
i = Image.open('code.png')
code_img_name = 'yzm.png'
frame = i.crop(rangle) # crop() 根据指定区域进行裁剪  PIL
frame.save(code_img_name)
2.
#解析result#219,94|81,78|159,16|241,131
all_lst = [] # 存储要被点击的坐标值 [[],[]]
if '|' in result:lst1 = result.split('|')count1 = len(lst1)for i in range(count1):xy_lst = []x = int(lst1[i].split(',')[0])y = int(lst1[i].split(',')[1])xy_lst.append(x)xy_lst.append(y)all_lst.append(xy_lst)
else:x = int(result.split(',')[0])y = int(result.split(',')[1])xy_lst = []xy_lst.append(x)xy_lst.append(y)all_lst.append(xy_lst)

二、​opencv简单使用(这里用了其美化照片功能)

简单介绍:

# opencv 图像处理框架
# 1 跨平台性(windows ios linux android...)
# 2 跨语言(Java C/C++ Python Ruby oc swift..)
# 3 支持功能丰富(opencv)
# 4 稳定、性能高(1999年-至今 intel)
# 5 BAT公司 做一些ai领域
# 6 安装 pip install opencv-python

opencv
https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_tutorials.html(参考文档)

import cv2
# 实现图片美颜效果
# 1 加载图片
image = cv2.imread('old_pic.jpg')
# 2 实现图片美颜效果value值越大美颜效果越明显 反之越小
value = 25
imgage_dst = cv2.bilateralFilter(image,value,value*2,value/2)# 生成一张图片
cv2.imwrite('new_pic.jpg',imgage_dst)# # 3 创建一个窗口
# cv2.namedWindow('image')
# # 4 展示窗口
# cv2.imshow('image',imgage_dst)
# # 5 窗口等待
# cv2.waitKey(0)#0或不填,则为一直等待
# # 6 销毁窗口
# cv2.destroyAllWindows()

三、行为验证

在这里插入图片描述

解决方案: selenium(鼠标行为链) + 算法
原理:完全模拟人的行为,按住滑块,拖动到目标缺口位置
​
思路:
我们将目标图片和目标缺口的距离分成2部分。前面一部分我们就刷的一下拖过去。后面一部分 我们可以先匀加速然后在匀减速
按住拖动按钮 拖动到目标缺口 松开
​
后面的一段速度代码需要用算法来实现

重要源代码:

1.算法部分
def get_tracks(distance):'''拿到移动轨迹,模仿人的行为,先匀速后减速匀加速运动公式:1 v=v0+at2 s=v0t+½at²'''# 初速度v = 0# 单位时间为0.3s来统计轨迹,轨迹即0.3s内的位移t = 0.3# 位置/轨迹列表,列表内的一个元素代表0.3s的位移tracks = [] # 保存的是匀加速和匀减速的距离# 当前的位移current = 0# 到达mid值开始减速mid = distance*4/5while current < distance:if current < mid:# 加速度越小,单位时间的位移越小,模拟的轨迹就越多越详细a = 2else:a = -3# 初速度v0 = v# 0.3秒内的位移s = v0*t+0.5*a*(t**2)# 当前的位置current += s# 添加轨迹到列表tracks.append(round(s))# 速度已达到v 该速度作为下次的初速度v = v0 + a*treturn tracks
2.
#破解行为验证
# 安装开始滑动的按钮 先移动180个像素
start_btn = driver.find_element_by_xpath('//*[@id="tcaptcha_drag_button"]')
time.sleep(2)
ActionChains(driver).click_and_hold(on_element=start_btn).perform()ActionChains(driver).move_to_element_with_offset(to_element=start_btn,xoffset=180,yoffset=0).perform()# 调用工具函数来移动剩下的距离
tracks = get_tracks(28)
for track in tracks:# move_by_offset() 鼠标从当前的位置移动多少距离ActionChains(driver).move_by_offset(xoffset=track,yoffset=0).perform()
time.sleep(1)
# 释放鼠标
ActionChains(driver).release().perform()

四、拓展

找工作核心点
简历(体现出你的优势 扬长避短)
手机录音 看看自己哪里没有做好
​
先做个自我介绍 流畅一些
​
时间: 
简历内容
1 联系方式(注意)
2 邮箱(别写QQ邮箱 163的邮箱)
3 学历(随机应变)
4 专业(大专及以上 99.9% 计算机专业 你就别写专业了)
5 技能(1 技能有条理性 2 写一些市面上比较热的技术opecv 3 准备)
6 项目(简历 )

这篇关于2021/7/3爬虫第三十二次课(反反爬措施二之突破行为验证,opencv)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/361164

相关文章

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

Python如何将OpenCV摄像头视频流通过浏览器播放

《Python如何将OpenCV摄像头视频流通过浏览器播放》:本文主要介绍Python如何将OpenCV摄像头视频流通过浏览器播放的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完... 目录方法1:使用Flask + MJPEG流实现代码使用方法优点缺点方法2:使用WebSocket传输视

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O