目录

  • 1、如何实现滑块拼图验证码高级版?
  • 2、HTML代码:
  • 3、Python代码:
  • 4、执行后报错,解决方案:
  • 5、完整代码,修改后如下:

1、如何实现滑块拼图验证码高级版?

2、HTML代码:

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8"><title>滑动拼图验证码高级版</title><link href="css/jigsawCanvas.css" rel="stylesheet"><link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet"></head><body><div class="col-md-4"><div class="jigsaw" id="jigsaw"><div class="imagebox" id="imagebox"><canvas width="380" height="260" id=jigsawCanvas></canvas><div class="missblock" id="missblock"></div></div><div class="jigsawTrack" id="jigsawTrack"><span class="jigsawCircle" id="jigsawCircle"></span><span class="jigsawTips" id="jigsawTips"><-合并滑块,完成拼图</span></div></div></div><script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script><script scr='js/jquery-3.1.1-min.js'></script><script src='js/jigsawCanvas.js'></script></body>
</html>

3、Python代码:

from selenium import webdriver
import os
import time
from PIL import Image, ImageChops# 1.访问网址
browser = webdriver.Chrome()
# url = r'E:\验证码反爬\高级滑动拼图验证码\index.html'  # 自己用的话可以直接写这样的固定路径
current_dir = os.path.dirname(os.path.abspath(__file__))  # 获取代码所在的文件夹目录
url = current_dir + '/index.html'  # 获取HTML文件的文件绝对路径
print('此时的文件路径为:' + url)  # 打印此时的文件路径,所以如果文件位置固定,可以直接写url = r'文件路径'
browser.get(url)  # 访问网址
time.sleep(2)# 2.获取原始图片
browser.find_element_by_xpath('//*[@id="jigsawCanvas"]').screenshot('origin.png')  # 获取原始图片# 3.获取有缺口的图片
slider = browser.find_element_by_xpath('//*[@id="jigsawCircle"]')  # 获取滑动按钮
slider.click()  # 先模拟点击下,方便下面获取到有缺口的图片
browser.find_element_by_xpath('//*[@id="jigsawCanvas"]').screenshot('after.png')  # 获取有缺口的图片# 4.比较两幅图片的区别,获取需要移动的距离
image_a = Image.open('origin.png') # 打开原始图片
image_b = Image.open('after.png') # 打开有缺口的图片
#print(image_a)
#print(image_b)
x = ImageChops.difference(image_a, image_b).getbbox()  # 比较两个图片的差别
print(x)  # 举个例子:倘若x为:(226, 103, 277, 154);返回缺口对应的左边横坐标(由左往右看),上边纵坐标(由上往下看),右边横坐标,下边纵坐标
distance = x[0]  # 第一个元素x[0]表示的就是缺口左边横坐标,也就是滑块需要移动的距离
print(distance)  # 如果例子为:(226, 103, 277, 154),那么需要移动的距离为226# 5.开始滑动!
action = webdriver.ActionChains(browser)  # 启动Selenium的动作链
action.click_and_hold(slider).perform()  # 按住滑动按钮不松开
action.move_by_offset(distance-10, 0)  # 开始滑动!这里-10,是把初始圆角矩形左侧left属性值给减去了,这样更准确
action.release().perform()  # 释放滑块

4、执行后报错,解决方案:

None
Traceback (most recent call last):
File "E:/tech/a.py", line 28, in <module>
distance = x[0]  # 第一个元素x[0]表示的就是缺口左边横坐标,也就是滑块需要移动的距离
KeyboardInterrupt
Process finished with exit code 1

查找资料发现是

对于Image.open()函数默认真彩图像读取通道顺序为RGB,而cv2.imread()则是BGR。同时,当图像格式为RGBA时,Image.open(‘—.jpg’)读取的格式为RGBA(其中A表示图像的alpha通道,即RGBA共四个通道),而cv2.imread(‘—.jpg’)读取的格式是BGR,只有三个通道
要加上:

image_a = Image.open('origin.png').convert('RGB')  # 打开原始图片
image_b = Image.open('after.png').convert('RGB')  # 打开有缺口的图片

5、完整代码,修改后如下:

from selenium import webdriver
import os
import time
from PIL import Image, ImageChops# 1.访问网址
browser = webdriver.Chrome()
# url = r'E:\验证码反爬\高级滑动拼图验证码\index.html'  # 自己用的话可以直接写这样的固定路径
current_dir = os.path.dirname(os.path.abspath(__file__))  # 获取代码所在的文件夹目录
url = current_dir + '/index.html'  # 获取HTML文件的文件绝对路径
print('此时的文件路径为:' + url)  # 打印此时的文件路径,所以如果文件位置固定,可以直接写url = r'文件路径'
browser.get(url)  # 访问网址
time.sleep(2)# 2.获取原始图片
browser.find_element_by_xpath('//*[@id="jigsawCanvas"]').screenshot('origin.png')  # 获取原始图片# 3.获取有缺口的图片
slider = browser.find_element_by_xpath('//*[@id="jigsawCircle"]')  # 获取滑动按钮
slider.click()  # 先模拟点击下,方便下面获取到有缺口的图片
browser.find_element_by_xpath('//*[@id="jigsawCanvas"]').screenshot('after.png')  # 获取有缺口的图片# 4.比较两幅图片的区别,获取需要移动的距离
image_a = Image.open('origin.png').convert('RGB')  # 打开原始图片
image_b = Image.open('after.png').convert('RGB')  # 打开有缺口的图片
#print(image_a)
#print(image_b)
x = ImageChops.difference(image_a, image_b).getbbox()  # 比较两个图片的差别
print(x)  # 举个例子:倘若x为:(226, 103, 277, 154);返回缺口对应的左边横坐标(由左往右看),上边纵坐标(由上往下看),右边横坐标,下边纵坐标
distance = x[0]  # 第一个元素x[0]表示的就是缺口左边横坐标,也就是滑块需要移动的距离
print(distance)  # 如果例子为:(226, 103, 277, 154),那么需要移动的距离为226# 5.开始滑动!
action = webdriver.ActionChains(browser)  # 启动Selenium的动作链
action.click_and_hold(slider).perform()  # 按住滑动按钮不松开
action.move_by_offset(distance-10, 0)  # 开始滑动!这里-10,是把初始圆角矩形左侧left属性值给减去了,这样更准确
action.release().perform()  # 释放滑块

执行后验证通过:

Python实战 | 滑块拼图验证码高级版详解相关推荐

  1. python哪里下载import包-【Python实战】模块和包导入详解(import)

    1.模块(module) 1.1 模块定义 通常模块为一个.py文件,其他可作为module的文件类型还有".pyo".".pyc".".pyd&qu ...

  2. Python中sorted()函数的高级用法详解

    sorted()函数的作用是对对象进行排序 函数函数格式: sorted(iterable,key,reverse),key参数可传入一个自定义函数 下边通过具体例子说明sorted的具体用法: 一维 ...

  3. python球球大作战简易版详解

    在玩很多游戏的时候,我们可以发现游戏里面的世界很大,但是整个窗口却最大不过我们屏幕大小,为了观察到整个世界,我们的视角窗口就会随着里面人物的移动不断的移动. 比如说游戏球球大作战,在玩这款游戏的时候我 ...

  4. Python中的高级数据结构详解

    这篇文章主要介绍了Python中的高级数据结构详解,本文讲解了Collection.Array.Heapq.Bisect.Weakref.Copy以及Pprint这些数据结构的用法,需要的朋友可以参考 ...

  5. [python opencv 计算机视觉零基础到实战] 四、了解色彩空间及其详解

    一.学习目标 了解什么是色彩空间 了解opencv中色彩空间的转换 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python opencv ...

  6. 拼图java监听器,Android 简单的实现滑块拼图验证码功能

    实现滑块拼图验证码功能之前已经写过一篇了,上一篇使用的是自定义控件的方式实现这个功能,主要还是想让童鞋们知其然更知其所以然,还没看的童鞋可以先看看Android实现滑块拼图验证码功能这篇. 在项目的开 ...

  7. Python中第三方库Requests库的高级用法详解

    Python中第三方库Requests库的高级用法详解 虽然Python的标准库中urllib2模块已经包含了平常我们使用的大多数功能,但是它的API使用起来让人实在感觉不好.它已经不适合现在的时代, ...

  8. JAVA 完整实现滑块拼图验证码

    后端随机生成抠图和带有抠图阴影的背景图片,后台保存随机抠图位置坐标 前端实现滑动交互,将抠图拼在抠图阴影之上,获取到用户滑动距离值,比如以下示例 前端将用户滑动距离值传入后端,后端校验误差是否在容许范 ...

  9. c语言拼图验证码编写,Android 简单的实现滑块拼图验证码功能

    实现滑块拼图验证码功能之前已经写过一篇了,上一篇使用的是自定义控件的方式实现这个功能,主要还是想让童鞋们知其然更知其所以然,还没看的童鞋可以先看看Android实现滑块拼图验证码功能这篇. 在项目的开 ...

最新文章

  1. 17福师《计算机应用基础,17春福师《计算机应用基础》在线作业一.doc
  2. 思科交换机vlan配置
  3. 皮一皮:直男只想说一句,表白?是表特别白吗?
  4. java垃圾回收策论_深入理解 Java 虚拟机【3】垃圾收集策略与算法
  5. 课程第一天内容《基础交换 一 》
  6. C语言获取某个分割符之前的内容
  7. oracle怎么扩大连接数,如何增加ORACLE连接数
  8. cocos2d-x AssetsManager libcurl使用心得
  9. NavisWorks Api 简单使用与Gantt
  10. 虚拟机中运行windows内核
  11. KVM安装(RHEL_6.4x64)
  12. C++解析(3):布尔类型与三目运算符
  13. win10 IE内核浏览器不能上网的问题
  14. WebSSH神器sshwifty的安装与使用
  15. 值得收藏的网站----安全
  16. 【高中数学】数列 · 通项求法
  17. Barefoot:可编程交换在5G中的潜力
  18. vue项目模拟后台数据
  19. 无人驾驶汽车的快速发展,主要运用了哪项新技术
  20. postgressql企业级数据库edb学习(一)

热门文章

  1. Item 38. 异常安全之公理(Exception Safety Axioms)
  2. python中setattr()函数用法详解
  3. vr 体验 vr游戏
  4. 时空预测4-graph wavenet
  5. FOR ALL ENTRIES IN 与 INNER JOIN 内表
  6. w10电脑c盘满了怎么清理_Win10系统C盘满了如何清理|Win10系统C盘满了的清理方法...
  7. 代理记账公司主要做什么,原来有这么多项目
  8. Java的六种线程状态
  9. webStorm 自动部署到远程服务器
  10. PHP 获取ip地址