selenium处理各类滑块验证码

  • 滑动验证码
    • 案例展示
    • 实现
  • 滑块拼图验证码
    • 案例展示
    • 实现
  • 滑块拼图验证码(Canvas)
    • 案例展示
    • 实现

滑动验证码

案例展示


这种只要用鼠标点击并移动指定距离就可以完成验证(x轴)

实现

# -*- coding: utf-8 -*-
import timefrom selenium import webdriver
from selenium.webdriver import ChromeOptions, ActionChains# 添加参数
options = ChromeOptions()
# options.add_argument('--headless')
# options.add_argument('--no-sanbox')# 创建WebDriver对象
browser = webdriver.Chrome(options=options)
browser.get('目标网址')
browser.maximize_window()
time.sleep(1)# 事件参数对象
actionChains = ActionChains(browser)# 捕捉滑块元素
slide_btn = browser.find_element_by_id('sliderblock')
# 观察网站滑块移动的长度和位置
actionChains.drag_and_drop_by_offset(slide_btn, 338, 0).perform()
time.sleep(5)
print(browser.page_source)# 关闭
browser.close()

滑块拼图验证码

案例展示


这种是点击滑块会弹出白色方块和暗灰色方块,只要将白色方块移动覆盖暗灰色方块便能通过,白色方块是一张图片,暗灰色方块是通过style样式设计的,我们可以根据它们之间style的left计算差异值从而得到滑块滑动距离

实现

# -*- coding: utf-8 -*-
import re
import timefrom selenium import webdriver
from selenium.webdriver import ChromeOptions, ActionChains# 添加参数
options = ChromeOptions()
# options.add_argument('--headless')
# options.add_argument('--no-sanbox')# 创建WebDriver对象
browser = webdriver.Chrome(options=options)
browser.get('目标网址')
browser.maximize_window()
time.sleep(2)# 事件参数对象
actionChains = ActionChains(browser)
# 点击滑块按钮触发位移内容
click_btn = browser.find_element_by_id('jigsawCircle')
click_btn.click()
time.sleep(1)# 通过计算方块和背景凹陷之前的距离移动滑块
white_btn_style = browser.find_element_by_id('missblock').get_attribute('style')
grey_img_style = browser.find_element_by_id('targetblock').get_attribute('style')
white_offset_px = re.search(r'left: (.*?)px;', white_btn_style).group(1)
grey_offset_px = re.search(r'left: (.*?)px;', grey_img_style).group(1)
slider_px = float(grey_offset_px.strip()) - float(white_offset_px.strip())# # 观察网站滑块移动的长度和位置
actionChains.drag_and_drop_by_offset(click_btn, slider_px, 0).perform()
time.sleep(2)
print(browser.page_source)# 关闭
browser.close()

滑块拼图验证码(Canvas)

案例展示

这种也是只要将白色方块移动覆盖暗灰色方块便能通过,但是暗灰色方块是通过canvas绘制的,我们无法通过样式知道它与白色方块的距离。可以先拿到绘制前后两张背景图,然后使用PIL对比两张图片的差异,得到差异的坐标。

实现

# -*- coding: utf-8 -*-
import timefrom PIL import Image, ImageChops
from selenium import webdriver
from selenium.webdriver import ChromeOptions, ActionChains# 添加参数
options = ChromeOptions()
# options.add_argument('--headless')
# options.add_argument('--no-sanbox')# 创建WebDriver对象
browser = webdriver.Chrome(options=options)
browser.get('http://www.porters.vip/captcha/jigsawCanvas.html')
browser.maximize_window()
time.sleep(2)# 定位滑块
slide_btn = browser.find_element_by_id('jigsawCircle')
# 定位背景图
pre_img = browser.find_element_by_id('imagebox')
# 截取背景图
pre_img.screenshot('before.png')
# 事件对象
actionChains = ActionChains(browser)
# 点击滑块
actionChains.click_and_hold(slide_btn).perform()
time.sleep(1)
# 使用js隐藏方块
script = """var missblock = document.getElementById('missblock');missblock.style['visibility'] = 'hidden';
"""
browser.execute_script(script)
time.sleep(1)
# 再次截图
pre_img.screenshot('after.png')# 使用PIL创建Image
before_img = Image.open('before.png').convert('RGB')
after_img = Image.open('after.png').convert('RGB')
# 使用ImageChops对比差异
different_place = ImageChops.difference(before_img, after_img)
diff_position = different_place.getbbox()# 使用js显示方块
script = """var missblock = document.getElementById('missblock');missblock.style['visibility'] = '';
"""
browser.execute_script(script)
time.sleep(1)# 观察网站滑块移动的长度和位置
actionChains.drag_and_drop_by_offset(slide_btn, diff_position[0] - 10, 0).perform()
time.sleep(2)# 关闭
browser.close()

使用ImageChops.difference对比差异是发现getbbox()返回的是None,这里需要在打开图片是采用RGB的方式:Image.open('after.png').convert('RGB')

selenium处理各类滑块验证码相关推荐

  1. Python + selenium自动化工具 + 滑块验证码+点选验证码,实现模拟登录“中国铁路网12306”

    文章目录 一.模拟登录"中国铁路网12306 1.引入库 2.初始化 3.将点选验证码图片,通过人工打码,返回目标像素位置(json格式). 4.点选验证码位置得到后,需要鼠标左击进行模拟人 ...

  2. selenium模拟国航滑块验证码

    本文就是大致讲解下使用selenium进行这个滑块验证码的拖动问题. 临时起意,看到了中国国际航空公司的官网,想试着采集下航班信息,发现官网是有不少难度的,操作也比较麻烦. 于是就用 fiddler ...

  3. python 滑块验证码_python selenium 淘宝滑块验证码 问题

    正常打开淘宝等页面,搜索商品和滑块验证码是没有问题的,但是用selenium打开,在多次翻页后出现的滑块验证码就总是失败,无论是手动滑还是代码控制都不可以,目前正在找解决办法... 此问题针对多次翻页 ...

  4. python 淘宝滑块验证_python selenium 淘宝滑块验证码 问题

    正常打开淘宝等页面,搜索商品和滑块验证码是没有问题的,但是用selenium打开,在多次翻页后出现的滑块验证码就总是失败,无论是手动滑还是代码控制都不可以,目前正在找解决办法... 此问题针对多次翻页 ...

  5. 最新突破“淘宝”登录接口方法,隐藏selenium,攻克滑块验证码

    今日因为工作需要,需要抓取淘宝上一些商品详情信息,而商品详情信息必须要在登陆以后才能进行访问,所以想要抓取商品信息,模拟登陆是第一个必须要解决的问题. 淘宝的模拟登陆说难也不难,说不难,也蛮多坑的.今 ...

  6. Python Selenium破解滑块验证码最新版!

    通过率高达百分之95!真的强! 一.滑块验证码简述 有爬虫,自然就有反爬虫,就像病毒和杀毒软件一样,有攻就有防,两者彼此推进发展.而目前最流行的反爬技术验证码,为了防止爬虫自动注册,批量生成垃圾账号, ...

  7. selenium破解滑块验证码自动查询+获取后续表单数据

    一.装载好chromedriver之后,运行命令行 "chrome.exe"(路径) --remote-debugging-port=9222 打开谷歌浏览器. 二.使用selen ...

  8. python手工打码_使用Python + Selenium破解滑块验证码

    在前面一篇博客,介绍了 Selenium 的基本用法和爬虫开发过程中经常使用的一些小技巧,利用这些写出一个浏览器爬虫已经完全没有问题了.看了前一篇博客,可能有人会有疑惑,浏览器爬虫的优势感觉并不比传统 ...

  9. 用selenium解决滑块验证码

    前言 因为种种原因没能实现愿景的目标,在这里记录一下中间结果,也算是一个收场吧.这篇博客主要是用selenium解决滑块验证码的个别案列. 思路: 用selenium打开浏览器指定网站 将残缺块图片和 ...

最新文章

  1. 5G时代到来,人工智能设备如何重塑TMT行业
  2. Python - 移除List中重复项的五种常用方法
  3. golang sync WaitGroup
  4. 02、如何进行网站性能优化或怎么加快页面的加载速度
  5. SAP Spartacus routing parameter mapping介绍
  6. 如何判断输入的是字符还是数字_[Leetgo]判断字符串是否为数字
  7. 不止 5G 和鸿蒙,华为最新大招,扔出 AI 计算核弹
  8. Spring攻略学习笔记(13)------继承Bean配置
  9. 帮助你免于失业的十大软件技术
  10. 在vs中进行qt桌面应用开发时,编译器堆溢出的编译错误(error C1060编译器堆内存不足)
  11. 使用matlab生成高斯滤波模板_matlab实现图像高斯滤波
  12. 2012-11-21nbsp;09:30nbsp;NSStr…
  13. 程序员考证之信息系统项目管理师
  14. 例行检查软件列表,突然发现不明sangforvnc应用
  15. win7系统用笔记本做wifi热点
  16. 阿里面试——机器学习/算法面试经验案例集合
  17. Android系统的指纹开发
  18. stm32检测串口空闲的原理
  19. 笔记本AutoCAD启动时闪退怎么办_CAD启动就闪退的原因分析
  20. 自动驾驶系列(二) - 路径规划五种算法简述及对比

热门文章

  1. MySQL之MySQL服务的使用以及四种语言分类的DQL(查询),DML(操作), DDL(数据定义),TCL(事务控制)
  2. 图解网络(三)——IP
  3. 解决OPPO手机adb调试找不到设备
  4. 从0开始创建vue工程化项目~
  5. 战略绩效管理工具:平衡计分卡简介
  6. 数智管理新动能,深度解读《2022中国指标中台市场研究报告》
  7. [VIP会员购]卖家报名
  8. 用友U8数据库表名中英文对照表
  9. 计算机专业基础综合先看什么,先别学了,你的考研初试科目已经变了!!!
  10. 西北大学计算机科学与技术学科评估,陕西高校第四轮学科评估9所有A类学科,第五轮会增加几所?...