【2019.05】腾讯防水墙滑动验证码破解 python + selenium + OpenCV
captcha_qq
腾讯防水墙滑动验证码破解
* 使用OpenCV库
* 成功率大概90%左右:在实际应用中,登录后可判断当前页面是否有登录成功才会出现的信息:比如用户名等。循环
* 验证码地址:https://open.captcha.qq.com/online.html
* 破解 腾讯滑动验证码
* 腾讯防水墙
* python + seleniuum + cv2
结果展示
这里有一点很有意思
- 如果滑动过快或者滑动的又精确又快的话,有时会解锁不成功,所以这里使用了 模拟人滑动的方法:
- 加速度,多滑,划回来等 各种操作,各位也可以多试试。
def get_track(distance):"""模拟轨迹 假装是人在操作:param distance::return:"""# 初速度v = 0# 单位时间为0.2s来统计轨迹,轨迹即0.2内的位移t = 0.2# 位移/轨迹列表,列表内的一个元素代表0.2s的位移tracks = []# 当前的位移current = 0# 到达mid值开始减速mid = distance * 7 / 8distance += 10 # 先滑过一点,最后再反着滑动回来# a = random.randint(1,3)while current < distance:if current < mid:# 加速度越小,单位时间的位移越小,模拟的轨迹就越多越详细a = random.randint(2, 4) # 加速运动else:a = -random.randint(3, 5) # 减速运动# 初速度v0 = v# 0.2秒时间内的位移s = v0 * t + 0.5 * a * (t ** 2)# 当前的位置current += s# 添加到轨迹列表tracks.append(round(s))# 速度已经达到v,该速度作为下次的初速度v = v0 + a * t# 反着滑动到大概准确位置for i in range(4):tracks.append(-random.randint(2, 3))for i in range(4):tracks.append(-random.randint(1, 3))return tracks
代码在这里
- star 一下
- 项目地址 https://github.com/ybsdegit/captcha_qq
- 入口代码地址 https://github.com/ybsdegit/captcha_qq/blob/master/captcha_qq.py
这里是代码
#!/usr/bin/env python
# encoding: utf-8# -*- coding: utf-8 -*-
# @contact: ybsdeyx@foxmail.com
# @software: PyCharm
# @time: 2019/4/25 16:39
# @author: Paulson●Wier
# @file: captcha_qq.py
# @desc:
import numpy as np
import randomimport requests
from selenium.webdriver import ActionChains
import time
from selenium import webdriver
from PIL import Image
import os
from selenium.webdriver.support.ui import WebDriverWait
import cv2class Login(object):"""腾讯防水墙滑动验证码破解使用OpenCV库成功率大概90%左右:在实际应用中,登录后可判断当前页面是否有登录成功才会出现的信息:比如用户名等。循环https://open.captcha.qq.com/online.html破解 腾讯滑动验证码腾讯防水墙python + seleniuum + cv2"""def __init__(self):# 如果是实际应用中,可在此处账号和密码self.url = "https://open.captcha.qq.com/online.html"self.driver = webdriver.Chrome()@staticmethoddef show(name):cv2.imshow('Show', name)cv2.waitKey(0)cv2.destroyAllWindows()@staticmethoddef webdriverwait_send_keys(dri, element, value):"""显示等待输入:param dri: driver:param element::param value::return:"""WebDriverWait(dri, 10, 5).until(lambda dr: element).send_keys(value)@staticmethoddef webdriverwait_click(dri, element):"""显示等待 click:param dri: driver:param element::return:"""WebDriverWait(dri, 10, 5).until(lambda dr: element).click()@staticmethoddef get_postion(chunk, canves):"""判断缺口位置:param chunk: 缺口图片是原图:param canves::return: 位置 x, y"""otemp = chunkoblk = canvestarget = cv2.imread(otemp, 0)template = cv2.imread(oblk, 0)# w, h = target.shape[::-1]temp = 'temp.jpg'targ = 'targ.jpg'cv2.imwrite(temp, template)cv2.imwrite(targ, target)target = cv2.imread(targ)target = cv2.cvtColor(target, cv2.COLOR_BGR2GRAY)target = abs(255 - target)cv2.imwrite(targ, target)target = cv2.imread(targ)template = cv2.imread(temp)result = cv2.matchTemplate(target, template, cv2.TM_CCOEFF_NORMED)x, y = np.unravel_index(result.argmax(), result.shape)return x, y# # 展示圈出来的区域# cv2.rectangle(template, (y, x), (y + w, x + h), (7, 249, 151), 2)# cv2.imwrite("yuantu.jpg", template)# show(template)@staticmethoddef get_track(distance):"""模拟轨迹 假装是人在操作:param distance::return:"""# 初速度v = 0# 单位时间为0.2s来统计轨迹,轨迹即0.2内的位移t = 0.2# 位移/轨迹列表,列表内的一个元素代表0.2s的位移tracks = []# 当前的位移current = 0# 到达mid值开始减速mid = distance * 7 / 8distance += 10 # 先滑过一点,最后再反着滑动回来# a = random.randint(1,3)while current < distance:if current < mid:# 加速度越小,单位时间的位移越小,模拟的轨迹就越多越详细a = random.randint(2, 4) # 加速运动else:a = -random.randint(3, 5) # 减速运动# 初速度v0 = v# 0.2秒时间内的位移s = v0 * t + 0.5 * a * (t ** 2)# 当前的位置current += s# 添加到轨迹列表tracks.append(round(s))# 速度已经达到v,该速度作为下次的初速度v = v0 + a * t# 反着滑动到大概准确位置for i in range(4):tracks.append(-random.randint(2, 3))for i in range(4):tracks.append(-random.randint(1, 3))return tracks@staticmethoddef urllib_download(imgurl, imgsavepath):"""下载图片:param imgurl: 图片url:param imgsavepath: 存放地址:return:"""from urllib.request import urlretrieveurlretrieve(imgurl, imgsavepath)def after_quit(self):"""关闭浏览器:return:"""self.driver.quit()def login_main(self):# ssl._create_default_https_context = ssl._create_unverified_contextdriver = self.driverdriver.maximize_window()driver.get(self.url)click_keyi_username = driver.find_element_by_xpath("//div[@class='wp-onb-tit']/a[text()='可疑用户']")self.webdriverwait_click(driver, click_keyi_username)login_button = driver.find_element_by_id('code')self.webdriverwait_click(driver, login_button)time.sleep(1)driver.switch_to.frame(driver.find_element_by_id('tcaptcha_iframe')) # switch 到 滑块frametime.sleep(0.5)bk_block = driver.find_element_by_xpath('//img[@id="slideBg"]') # 大图web_image_width = bk_block.sizeweb_image_width = web_image_width['width']bk_block_x = bk_block.location['x']slide_block = driver.find_element_by_xpath('//img[@id="slideBlock"]') # 小滑块slide_block_x = slide_block.location['x']bk_block = driver.find_element_by_xpath('//img[@id="slideBg"]').get_attribute('src') # 大图 urlslide_block = driver.find_element_by_xpath('//img[@id="slideBlock"]').get_attribute('src') # 小滑块 图片urlslid_ing = driver.find_element_by_xpath('//div[@id="tcaptcha_drag_thumb"]') # 滑块os.makedirs('./image/', exist_ok=True)self.urllib_download(bk_block, './image/bkBlock.png')self.urllib_download(slide_block, './image/slideBlock.png')time.sleep(0.5)img_bkblock = Image.open('./image/bkBlock.png')real_width = img_bkblock.size[0]width_scale = float(real_width) / float(web_image_width)position = self.get_postion('./image/bkBlock.png', './image/slideBlock.png')real_position = position[1] / width_scalereal_position = real_position - (slide_block_x - bk_block_x)track_list = self.get_track(real_position + 4)ActionChains(driver).click_and_hold(on_element=slid_ing).perform() # 点击鼠标左键,按住不放time.sleep(0.2)# print('第二步,拖动元素')for track in track_list:ActionChains(driver).move_by_offset(xoffset=track, yoffset=0).perform() # 鼠标移动到距离当前位置(x,y)time.sleep(0.002)# ActionChains(driver).move_by_offset(xoffset=-random.randint(0, 1), yoffset=0).perform() # 微调,根据实际情况微调time.sleep(1)# print('第三步,释放鼠标')ActionChains(driver).release(on_element=slid_ing).perform()time.sleep(1)print('登录成功')self.after_quit()if __name__ == '__main__':phone = "****"login = Login()login.login_main()
【2019.05】腾讯防水墙滑动验证码破解 python + selenium + OpenCV相关推荐
- 【2019.05】极验滑动验证码破解 geetest
[极验测试站]https://www.geetest.com/demo/slide-popup.html 滑动验证码如下图 破解滑动验证码一般都是得到验证码的原图和有滑块的图,这里我们抓包发现极验的原 ...
- glidedsky挑战-滑块验证码反爬(腾讯防水墙滑块验证码)
相应页面(http://glidedsky.com/level/web/crawler-captcha-1) 题目要求: 先看看页面: 当我们一打开页面,就是出现滑块验证码页面,我们所要的数字参数是没 ...
- selenium自动化案例(二)滑动验证码破解
文章目录 写在前面 大致思路 Python实现 几个小坑 写在前面 最近学习了滑动验证的一个破解思路,是利用OpenCV的图形匹配算法进行对比验证,从而推算出滑块移动的距离,在实际应用中比较常见,我主 ...
- 验证码破解:极验3.0滑动验证码破解最新俩种方法
特点: 对于极验验证码3.0版本,我们首先点击按钮进行智能验证.如果验证不通过,则会弹出滑动的验证的窗口,拖动滑块拼合图像进行验证.之后三个加密参数会生成,通过表单提交到后台,后台还会进行一次验证. ...
- python滑动验证码处理_python+selenium滑动式验证码解决办法
from selenium importwebdriverfrom selenium.webdriver.support.ui import WebDriverWait #等待元素加载的 from s ...
- 极验验证的滑动验证码破解
最近在搞爬虫的时候在好几个网站都碰到了一种叫做geetest的滑动条验证码,一直没有太好的办法只能在触发这个验证码后发个报警去手动处理一下.http://www.geetest.com/exp_emb ...
- 极验滑动验证码破解分析
来自知乎文章 极验验证码验证的是鼠标拖动滑块时的鼠标轨迹,完整步骤就像这样:先向目标网站请求一个id,然后拿着id去geetest服务器请求图片:接下来就开始拖动滑块,拖动的过程会被js记录下来:松开 ...
- Python爬虫 | 滑动验证码破解
极验验证码:需要手动拼合滑块来完成的验证,相对图形验证码识别难度上升了几个等级.下面用程序识别并通过极验验证码的验证,其中有分析识别思路.识别缺口位置.生成滑块拖动.模拟实现滑块拼合通过验证等步骤.需 ...
- selenium + Chrome 滑动验证码破解三之京东 实现某东登录
之前爬取模拟登录B站和模拟春秋官网的注册验证码,问题都不大.所以今天想挑战下某东,对于稍微有些爬虫基础的来说脚本到登录界面应该都没什么问题,这部分就直接上代码了哈 1.最先开始到输入账号密码,点击登录 ...
- 极验验证码破解之selenium
这一篇写完很久了,因为识别率一直很低,没办法拿出来见大家,所以一直隐藏着,今天终于可以拿出来见见阳光了. 哈喽,大家好,我是星星在线,我又来了,今天给大家带来的是极验验证码的selenium破解之法, ...
最新文章
- Ubuntu 根目录作用
- php json对象取数据类型,PHP如何科学地json_encode类对象数据
- 第二章 Matlab变量
- 学python的前提_Python语言学习前提:条件语句
- 前端判断数据类型的通用方法
- 福利再度来袭,R语言数据分析书籍值得你拥有
- 报错,could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarExc
- 03-23 卡顿分析
- NSAttributedString
- Ajax-jsonp跨域
- [Silverlight动画]转向行为 - 路径跟随
- Html表格lt;tablegt;还是须要加入一些标签进行优化,能够加入标题lt;captiongt;和摘要lt;table summarygt;...
- 石头扫地机器人加速异响_AI助力,无惧障碍 石头扫地机器人T7Pro测评
- 什么是少儿Python编程?
- 电子计算机一直在响,电脑硬盘一直响个不停怎么解决
- Photoshop抠图教程(超详细)
- 【SEED Labs 2.0】ICMP Redirect Attack Lab
- 传雅虎考虑收购新闻摘要应用Summly
- 【Paper】Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation
- Android 关于佳博和汉印蓝牙热敏打印机开发,kotlin爬虫app
热门文章
- 安卓升级AndroidX手把手教程
- 从心理学角度看,为什么我们的业务规划总是过于乐观?
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛-B:Tomb Raider(模拟+二进制枚举子串)
- 计蒜客:Adjoin the Networks
- 5分钟学完《梁宁产品思维30讲》
- vr电力作业安全培训覆盖三大板块,为学员提供高仿真的技能培训
- 读《京东咚咚架构演进》有感
- c语言 虚拟示波器软件下载,多功能串口虚拟示波器(DataScope)
- matlab清除坐标轴,matlab 使用技巧之设置坐标轴
- MATLAB中的pause用法,pause使用方法 C语言 pause()函数问题