侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Python模拟登录之滑块验证码的破解(实例代码)

Python  /  管理员 发布于 7年前   289

模拟登录之滑块验证码的破解,具体代码如下所示:

# 图像处理标准库from PIL import Image# web测试from selenium import webdriver# 鼠标操作from selenium.webdriver.common.action_chains import ActionChains# 等待时间 产生随机数import time, random# 滑块移动轨迹def get_tracks1(distance): # 初速度 v = 0 # 单位时间为0.3s来统计轨迹,轨迹即0.3s内的位移 t = 0.3 # 位移/轨迹列表 tracks = [] # 当前的位移 current = 0 # 到达mid值开始减速 mid = distance * 4 / 5 while current < distance:  if current < mid:   # 加速度越小,单位时间内的位移越小,模拟的轨迹就越多越详细   a = 2  else:   a = -3  # 初速度  v0 = v  # 0.3s时间内的位移  s = v0 * t + 0.5 * a * (t ** 2)  # 当前位置  current += s  # 添加到轨迹列表  tracks.append(round(s))  # 速度已经达到V,该速度作为下次的初速度  v = v0 + a * t return tracks# 计算滑块位移距离def get_diff_location(image1, image2): # (0,340)(0,340)为滑块图片区域,可根据实际情况修改 for i in range(0, 340):  for j in range(0, 198):   # 遍历原图与缺口图像素值寻找缺口位置   if is_similar(image1, image2, i, j) == False:    return i return -1# 对比RGB值得到缺口位置def is_similar(image1, image2, x, y): pixel1 = image1.getpixel((x, y)) pixel2 = image2.getpixel((x, y)) # 截图像素也许存在误差,50作为容差范围 if abs(pixel1[0] - pixel2[0]) >= 50 and abs(pixel1[1] - pixel2[1]) >= 50 and abs(pixel1[2] - pixel2[2]) >= 50:  return False return Truedef login(): # 实例化浏览器 driver = webdriver.Chrome() # 请求登录网址 driver.get('https://account.cnblogs.com/signin?returnUrl=https%3A%2F%2Fwww.cnblogs.com%2F') # 最大化浏览器 driver.maximize_window() # 输入账号 driver.find_element_by_xpath('//*[@id="LoginName"]').send_keys('你的账号') # 输入密码 driver.find_element_by_xpath('//*[@id="Password"]').send_keys('你的密码') # 点击登录 driver.find_element_by_xpath('//*[@id="submitBtn"]/span[1]').click() # 等待2s使验证弹窗加载完成 time.sleep(2) # 定位到圆球 slider = driver.find_element_by_xpath('/html/body/div[2]/div[2]/div[6]/div/div[1]/div[2]/div[2]') # 点击鼠标左键,不松开 ActionChains(driver).click_and_hold(slider).perform() # 拖动到最右边,为了后续方便对比 ActionChains(driver).move_by_offset(xoffset=198, yoffset=0).perform() # 定位到弹出的验证窗口 y_element = driver.find_element_by_xpath('/html/body/div[2]/div[2]') # print(y_element.location) # print(y_element.size) # 获取左上,右,左下的坐标确定一个图片范围 left = y_element.location['x'] top = y_element.location['y'] right = left + y_element.size['width'] bottom = top + y_element.size['height'] # 全窗口截图 driver.save_screenshot('a.png') # 打开截图的图片 im = Image.open('a.png') # 局部截图 im = im.crop((left + 160, top + 55, right + 225, bottom - 30)) # 保存有缺口的验证图片 im.save('b.png') # 放开鼠标 ActionChains(driver).release(slider).perform() time.sleep(2) # 定位到可以显示无缺图片的位置 block = driver.find_element_by_xpath('/html/body/div[2]/div[2]/div[6]/div/div[1]/div[1]/div/a/div[1]/canvas') # 修改其属性值,使显示无缺图片 driver.execute_script('arguments[0].style = "display: block; opacity: 1;"', block) time.sleep(2) # 全窗口截图 driver.save_screenshot('a.png') # 打开截图的图片 im = Image.open('a.png') # 局部截图 im = im.crop((left + 160, top + 55, right + 225, bottom - 30)) # 保存无缺口的验证图片 im.save('c.png') time.sleep(0.5) # 打开获取的两个图片 imageb = Image.open('b.png') imagec = Image.open('c.png') # 获取缺口位置 visualstack = get_diff_location(imagec, imageb) # 减去左边图片空白像素值 print(visualstack - 10) # 点击鼠标左键,不松开 ActionChains(driver).click_and_hold(slider).perform() # 先快速拖动圆球到中间位置 ActionChains(driver).move_by_offset(xoffset=visualstack/2,yoffset=0).perform() # 根据轨迹拖动圆球 track_list = get_tracks1((visualstack/2 - 48)) for track in track_list:  ActionChains(driver).move_by_offset(xoffset=track, yoffset=0).perform() # 放开圆球 time.sleep(0.8) ActionChains(driver).release(slider).perform() print(driver.page_source) time.sleep(4) if '你的昵称' in driver.page_source:  print('登录成功')  print(driver.get_cookies()) else:  driver.close()  login()if __name__ == '__main__': login()

总结

以上所述是小编给大家介绍的Python模拟登录之滑块验证码的破解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!


  • 上一条:
    wxPython色环电阻计算器
    下一条:
    wxPython实现文本框基础组件
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go语言中实现字符串可逆性压缩及解压缩功能(0个评论)
    • 使用go + gin + jwt + qrcode实现网站生成登录二维码在app中扫码登录功能(0个评论)
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客