最新版腾讯防水墙(二代)识别

2022最新版腾讯防水墙(二代)识别

戳这里→康康你手机号在过多少网站注册过!!!
友情推荐:新一代安全短信

* 验证码地址:https://007.qq.com/online.html
* 使用OpenCv模板匹配
* 成功率90%左右
* Java + Selenium + OpenCV

最近不少爬虫界面的朋友发现,原来可以识别腾讯防水墙的代码报错了, 怎么回事 ?
原来是腾讯防水墙做了升级

产品样例
背景图
在这里插入图片描述和工具体混在一起的滑动图
在这里插入图片描述截取图:
在这里插入图片描述

改进主要特点:
1 将滑块图片混合在工具条中,透明度不同,外边加了边框
2 iframe , 名字有原来的 tcaptcha_iframe ,变为 tcaptcha_iframe_dy

分析:
关键点在于滑块的变化,由于滑块混合,第一步肯定要做切割,
切割完后如果简单做二值化, 就会形成外框 ,这样下一步的就无法做模板匹配

在这里插入图片描述
在这里插入图片描述
掌握了特点, 就有了解决的思路,办法总比困难多
最后完美解决,识别率也不太高, 在 99% 左右吧

来吧!展示!

结果图1 : 五边形
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述 结果图2 : 四边形
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结果图3 :

在这里插入图片描述在这里插入图片描述在这里插入图片描述

注意!!!
· 在模拟滑动时不能按照相同速度或者过快的速度滑动,需要向人滑动时一样先快后慢,这样才不容易被识别。
模拟滑动代码↓↓↓

/*** 模拟人工移动* @param driver* @param element页面滑块* @param distance需要移动距离*/public static void move(WebDriver driver, WebElement element, int distance) throws InterruptedException {int randomTime = 0;if (distance > 90) {randomTime = 250;} else if (distance > 80 && distance <= 90) {randomTime = 150;}List<Integer> track = getMoveTrack(distance - 2);int moveY = 1;try {Actions actions = new Actions(driver);actions.clickAndHold(element).perform();Thread.sleep(200);for (int i = 0; i < track.size(); i++) {actions.moveByOffset(track.get(i), moveY).perform();Thread.sleep(new Random().nextInt(300) + randomTime);}Thread.sleep(200);actions.release(element).perform();} catch (Exception e) {e.printStackTrace();}}/*** 根据距离获取滑动轨迹* @param distance需要移动的距离* @return*/public static List<Integer> getMoveTrack(int distance) {List<Integer> track = new ArrayList<>();// 移动轨迹Random random = new Random();int current = 0;// 已经移动的距离int mid = (int) distance * 4 / 5;// 减速阈值int a = 0;int move = 0;// 每次循环移动的距离while (true) {a = random.nextInt(10);if (current <= mid) {move += a;// 不断加速} else {move -= a;}if ((current + move) < distance) {track.add(move);} else {track.add(distance - current);break;}current += move;}return track;}

看操作,no bb,直接上代码

/*** v2 版本* * @param driver* @return*/public RetEntity moveExec(WebDriver driver, boolean isLocal) {File bFile = null;File sFile = null;RetEntity retEntity = new RetEntity();retEntity.setRet(-1);try {// 获取到验证区域WebElement iframe = ChromeDriverManager.waitElement(driver, By.id("tcaptcha_iframe_dy"), 100);if (iframe == null) {System.out.println("moveExec() tcaptcha_iframe|timeout!!!");retEntity.setMsg("tcaptcha_iframe|timeout!!");return retEntity;}driver.switchTo().frame(iframe);sleep(500);// 获取带阴影的背景图WebElement wegSlideBg = driver.findElement(By.id("slideBg"));String cssValue = wegSlideBg != null ? wegSlideBg.getCssValue("background-image") : null;String bgUrl = (cssValue != null && cssValue.contains("\"")) ? cssValue.split("\"")[1] : null;if (bgUrl == null) {retEntity.setMsg("bgUrl=" + bgUrl);return retEntity;}Long time = System.currentTimeMillis();// 获取小图 URL (替换img_index=1为 img_index=0)String slUrl = bgUrl.replaceAll("img_index=1", "img_index=0");System.out.println("bgUrl=" + bgUrl);System.out.println("slUrl=" + slUrl);bFile = new File(dataPath + time + "-b.png");sFile = new File(dataPath + time + "-s.png");int getMode = 0;Map<String, byte[]> retMap = (getMode == 0) ? getTwoImg(driver, bgUrl, slUrl, bFile, sFile) : getTwoImgOpen(driver, bgUrl, slUrl, bFile, sFile);if (retMap != null) {byte[] bigBytes = retMap.get("big");byte[] smallBytes = retMap.get("small");String distanceStr = null, width = null;String ckSum = GenChecksumUtil.genChecksum(bigBytes);String[] outArray = openCv2.getOpenCvDistance(ckSum, bigBytes, smallBytes, "tencent_v2", 3);distanceStr = (outArray != null && outArray.length >= 2) ? outArray[1] : null;width = (outArray != null && outArray.length >= 2) ? outArray[0] : null;Double left = 27.0 * 672 / 340;// 起点距左边距离Double act = (Double.parseDouble(distanceStr) - left - Double.parseDouble(width)) * 340.0 / 672.0;Integer distance = act.intValue();System.out.println("moveExec()  distance(" + distanceStr + ")=" + distance);if (distance == null || distance <= 0) {return retEntity;}if (getMode != 0)driver.switchTo().frame(iframe);WebElement moveElemet = ChromeDriverManager.waitElement(driver, By.className("tc-slider-normal"), 500);sleep(500);// 滑动GeetCanvasApi.move(driver, moveElemet, distance);sleep(400);// 滑动结果String gtInfo = ChromeDriverManager.waitElement(driver, By.id("statusSuccess"), 100).getText();if (gtInfo == null || "".equals(gtInfo)) {sleep(200);gtInfo = ChromeDriverManager.waitElement(driver, By.id("statusError"), 100).getText();}System.out.println("moveExec() gtInfo=" + gtInfo);if (gtInfo.contains("验证成功")) {retEntity.setRet(0);retEntity.setMsg(gtInfo);logger.info(retEntity.toString());} else if (gtInfo.contains("再试一次") || gtInfo.contains("恍惚了") || gtInfo.contains("半路丢了")) {retEntity.setRet(-1);retEntity.setMsg("失败");}} else {logger.error("retMap=" + retMap);retEntity.setMsg("retMap=" + retMap);return retEntity;}return retEntity;} catch (Exception e) {StringBuffer er = new StringBuffer("moveExec() " + e.toString() + "\n");for (StackTraceElement elment : e.getStackTrace())er.append(elment.toString() + "\n");logger.error(er.toString());System.out.println(er.toString());retEntity.setMsg(er.toString());return retEntity;} finally {if (retEntity.getRet() == 0) {System.out.println("moveExec() del file...");if (bFile != null)bFile.delete();if (sFile != null)sFile.delete();}}}private Map<String, byte[]> getTwoImg(WebDriver driver, String bgUrl, String slUrl, File bFile, File sFile) {try {FileUtils.copyURLToFile(new URL(bgUrl), bFile);FileUtils.copyURLToFile(new URL(slUrl), sFile);BufferedImage sBI = ImageIO.read(sFile);sBI = sBI.getSubimage(135, 478, 129, sBI.getHeight() - 478);ImageIO.write(sBI, "png", sFile);byte[] bigBytes = FileUtils.readFileToByteArray(bFile);byte[] smallBytes = FileUtils.readFileToByteArray(sFile);Map<String, byte[]> retMap = new HashMap<String, byte[]>();retMap.put("big", bigBytes);retMap.put("small", smallBytes);return retMap;} catch (Exception e) {StringBuffer er = new StringBuffer("getTwoImgOpen() " + e.toString() + "\n");for (StackTraceElement elment : e.getStackTrace())er.append(elment.toString() + "\n");logger.error(er.toString());System.out.println(er.toString());return null;}}/*** * @param mat*            二值化图像*/public static void binaryzation(Mat mat) {int BLACK = 0;int WHITE = 255;int ucThre = 0, ucThre_new = 127;int nBack_count, nData_count;int nBack_sum, nData_sum;int nValue;int i, j;int width = mat.width(), height = mat.height();// 寻找最佳的阙值while (ucThre != ucThre_new) {nBack_sum = nData_sum = 0;nBack_count = nData_count = 0;for (j = 0; j < height; ++j) {for (i = 0; i < width; i++) {nValue = (int) mat.get(j, i)[0];if (nValue > ucThre_new) {nBack_sum += nValue;nBack_count++;} else {nData_sum += nValue;nData_count++;}}}nBack_sum = nBack_sum / nBack_count;nData_sum = nData_sum / nData_count;ucThre = ucThre_new;ucThre_new = (nBack_sum + nData_sum) / 2;}// 二值化处理int nBlack = 0;int nWhite = 0;for (j = 0; j < height; ++j) {for (i = 0; i < width; ++i) {nValue = (int) mat.get(j, i)[0];if (nValue > ucThre_new) {mat.put(j, i, WHITE);nWhite++;} else {mat.put(j, i, BLACK);nBlack++;}}}// 确保白底黑字if (nBlack > nWhite) {for (j = 0; j < height; ++j) {for (i = 0; i < width; ++i) {nValue = (int) (mat.get(j, i)[0]);if (nValue == 0) {mat.put(j, i, WHITE);} else {mat.put(j, i, BLACK);}}}}}// 延时加载private static WebElement waitWebElement(WebDriver driver, By by, int count) throws Exception {WebElement webElement = null;boolean isWait = false;for (int k = 0; k < count; k++) {try {webElement = driver.findElement(by);if (isWait)System.out.println(" ok!");return webElement;} catch (org.openqa.selenium.NoSuchElementException ex) {isWait = true;if (k == 0)System.out.print("waitWebElement(" + by.toString() + ")");elseSystem.out.print(".");Thread.sleep(50);}}if (isWait)System.out.println(" outTime!");return null;}

在这里插入图片描述
戳这里→康康你手机号在过多少网站注册过!!!
友情推荐:新一代安全短信

相关阅读
谷歌图形验证码在AI 面前已经形同虚设,所以谷歌宣布退出验证码服务, 那么当所有的图形验证码都被破解时
《腾讯防水墙滑动拼图验证码》
《百度旋转图片验证码》
《网易易盾滑动拼图验证码》
《顶象区域面积点选验证码》
《顶象滑动拼图验证码》
《极验滑动拼图验证码》
《使用深度学习来破解 captcha 验证码》
《验证码终结者-基于CNN+BLSTM+CTC的训练部署套件》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/23376.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用大型语言模(LLM)构建系统(七):评估1

今天我学习了DeepLearning.AI的 Building Systems with LLM 的在线课程&#xff0c;我想和大家一起分享一下该门课程的一些主要内容。之前我们已经学习了下面这些知识&#xff1a; 使用大型语言模(LLM)构建系统(一)&#xff1a;分类使用大型语言模(LLM)构建系统(二):内容审核、…

chatgpt赋能Python-python_def函数报错

如何关闭Python Console 在Python编程中&#xff0c;Python Console是一个常用的工具&#xff0c;它可以用来测试和调试代码、查看变量和函数等等。但是&#xff0c;在一些情况下&#xff0c;你可能需要关闭Python Console以便进行其他操作。那么&#xff0c;如何关闭Python C…

chatgpt赋能Python-python_nonetype报错

Python NoneType报错&#xff1a;原因、解决方法和预防措施 Python 是一种面向对象的高级编程语言&#xff0c;用于快速编写脚本和应用程序。但是&#xff0c;当我们在编写 Python 代码时&#xff0c;可能会遇到 NoneType 报错&#xff1b;这是一种类型错误&#xff0c;它发生…

main函数的行参(argc、argv)实例解释

目录 前言 一、问题描述 二、行参含义 三、题目应用 1、代码&#xff08;重点在中文批注处&#xff09; 2、执行测试 前言 在做CS50 Week3的problem set--plurality时&#xff0c;遇到main函数里带了两个行参&#xff08;int argc&#xff0c; string argv[]&#xff09;…

LLM探索:GPT类模型的几个常用参数 Top-k, Top-p, Temperature

Top-k抽样模型从最可能的"k"个选项中随机选择一个如果k10&#xff0c;模型将从最可能的10个单词中选择一个Top-p抽样模型从累计概率大于或等于“p”的最小集合中随机选择一个如果p0.9&#xff0c;选择的单词集将是概率累计到0.9的那部分Temperature控制生成文本随机性…

GPT-4震撼发布:如何加入候补名单

ChatGPT 点燃了科技行业的明灯&#xff0c;GPT-4 能燎原吗&#xff1f; 谁能革得了 ChatGPT 的命&#xff1f;现在看来还是 OpenAI 自己。 在 ChatGPT 引爆科技领域之后&#xff0c;人们一直在讨论 AI「下一步」的发展会是什么&#xff0c;很多学者都提到了多模态&#xff0c;我…

chatgpt赋能python:如何用Python打造一个简单的抽奖程序

如何用Python打造一个简单的抽奖程序 随着互联网的不断发展&#xff0c;抽奖活动已经成为了各种营销活动的必备环节&#xff0c;因此如何快速便捷地实现一个抽奖程序也变得尤为重要。本文将介绍如何使用Python打造一个简单的抽奖程序。 一、抽奖程序的工作原理 抽奖程序的核…

一文读懂 ChatGPT 插件功能:语言模型获取新信息的“眼睛和耳朵”

来源&#xff1a;OpenAI 编译&#xff1a;巴比特 图片来源&#xff1a;由无界 AI工具生成 OpenAI&#xff1a;我们已经在 ChatGPT 中实现了对插件的初步支持。插件是专门为语言模型设计的工具&#xff0c;以安全为核心原则&#xff0c;并帮助 ChatGPT 访问最新的信息&#xff0…

OpenAI 再丢“王炸”:ChatGPT “封印”解除,能联网、搜索了!

整理 | 屠敏 郑丽媛 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 「乱花渐欲迷人眼」&#xff0c;新的一天里&#xff0c;OpenAI 再次丢出“王炸”&#xff1a;ChatGPT 推出插件功能&#xff0c;既能联网&#xff0c;也能开启搜索&#xff0c;还能执行代码和运…

三菱加工中心CNC编程G代码讲解

注意&#xff1a;在G之后没有接续数值指令中&#xff0c;在运转时将变成G00的动作。&#xff08;注1&#xff09;印有“*”记号表示初期状态应选择的指令码或被选择的指令码。印有“※”记号表示初期状态依参数所选定指令码或被选择的指令码。&#xff08;注2&#xff09;同一单…

如何用ChatGPT做咨询师,附Prompt

对基本问题研究得不深不透、得不到可靠的分析框架支持的情况下&#xff0c;仓促采取就事论事的应对措施 &#xff0c;由于未能触及事情的根本&#xff0c;往往非但不能获得预期的效果&#xff0c;相反可能引发新的矛盾。 ——吴敬琏&#xff08;著名经济学家&#xff0c;国务院…

chatGPT:5分钟制作PPT

近日&#xff0c;公司推广办公自动化&#xff0c;让我当回培训师&#xff0c;培训后勤部门员工如何使用RPA。做个培训PPT的重任自然得交给chatGPT了&#xff0c;以下是制作步骤&#xff1a; 步骤一&#xff1a;拟写提示词交chatGPT “你现在是一位编写PPT的高手。我会提出PPT的…

ChatGPT技巧大揭秘之PPT制作

接下来&#xff0c;我们将进入全新的ChatGPT篇章&#xff0c;这个篇章的主要目的是教大家如何正确地使用ChatGPT。很多人接触过ChatGPT&#xff0c;但是最终的结果都是不太满意&#xff0c;认为ChatGPT并没有传说中那么神奇。确实&#xff0c;要想让ChatGPT达到电影中那样神奇的…

安全的可靠的数据防泄密系统

大数据时代的来临&#xff0c;给人们的生活带来了很多便利&#xff0c;给企业提供了更多的商业机遇&#xff0c;而另一方面&#xff0c;大数据又增加了重要信息泄漏的风险&#xff0c;普通的信息安全防护手段在现阶段已经不能满足大数据时代的信息安全需求&#xff0c;需要专业…

恐怖的ChatGPT,肉哥也All in了!

这段时间真是太刺激了&#xff0c;AI领域几乎每天都会爆出一个超震撼的产品&#xff0c;有一种科幻马上要成现实的感觉。 不知道大家朋友圈是什么样&#xff0c;在整个创业的圈子里面&#xff0c;几乎全是 AI 相关。 就连 N 多年&#xff0c;传说中退休的传统互联网大佬&#x…

ChatGPT 速通手册——不同相似度算法的分值介绍

不同相似度算法的分值介绍 在信息大暴涨的今天&#xff0c;人类已经不可能出现通才、全才式的人物。利用 ChatGPT 来询问我们未知领域的知识是很好的习惯和用法。但对严肃知识的学习&#xff0c;一定要通过权威来源复核审校&#xff0c;保证自己所学知识的正确。否则&#xff…

亚马逊僵尸获取的三种方法 你正在使用哪一种?

亚马逊做跟卖的话是很简单便捷&#xff0c;不用自己大费周章的编写产品的listing 只需要找到一些合适的产品进行跟卖就可以了&#xff0c;还可以找到僵尸产品进行跟卖&#xff0c;我们常用的获取僵尸产品的三种方法&#xff1b; 第一种就是最原始的在亚马逊的商品页去找僵尸产品…

new bing 初体验:辅助看论文刚刚好

1. new bing使用条件 &#xff08;1&#xff09;安装Microsoft edge的dev版本 https://www.microsoft.com/zh-cn/edge/download?formMA13FJ &#xff08;2&#xff09;浏览器侧栏打开 Discover (3) 进入new bing 页面 侧栏展示 new bing 如果这一步&#xff0c;没有聊天功能…

在课堂上使用ChatGPT的三种创意方法

泰晤士世界大学排名. 自1910年从泰晤士报的一个高等教育专栏开始&#xff0c;经过100多年的建设和转变&#xff0c;泰晤士现已是一所世界大学大数据分析的国际机构&#xff0c;同时是获奖无数的国际高教传媒&#xff0c;每日及时报道各国各领域的高教发展趋势和走向。 在课堂上…

ChatGPT的横空出世,带给教育的冲击有多大?

最近很火的ChatGPT想必大家都有所耳闻&#xff0c;短短数日就占据了各大热搜榜单&#xff0c;或许我们无法明晰商业的浪潮&#xff0c;也对技术原理知之甚少&#xff0c;但它的功能却强大到让人叹为观止。 它可以写文章&#xff0c;可以做预算&#xff0c;可以编写代码……甚至…