java/node代码 破解“滑动验证码”的移动距离

1.直接上代码结论 

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;public class SlideDistanceCalculator {public static void main(String[] args) {// 这个是缺口图片的地址String urlString = "https://p16-rc-captcha-sg.ibyteimg.com/tos-alisg-i-749px8mig0-sg/273f160eeef34cfdbe232da3c3a90690~tplv-749px8mig0-2.jpeg";// 其中的 340跟212 这个值具体填多少,要看你爬的那个网站的验证码的高度跟宽度// 这个4 是偏移量,因为每次算出来的结果跟我要爬的那个网站的距离总是多了 4个px 所以我在这就减了4PXchangeImageGray(convertImageToByteArray(urlString,340,212),4);}/*** 获取移动距离* @param imgByte 图片字节数组* @param offset 偏移量* @return*/public static int changeImageGray(byte[] imgByte,Integer offset) {try {// 读取图片BufferedImage image = ImageIO.read(new ByteArrayInputStream(imgByte));// 获取图片的宽度和高度int width = image.getWidth();int height = image.getHeight();int[][] lightArray = new int[height][width];// 遍历图片的像素点,将其转换为黑白for (int y = 0; y < height; y++) {for (int x = 0; x < width; x++) {// 获取像素点的颜色Color color = new Color(image.getRGB(x, y));// 计算灰度值int gray = Double.valueOf((color.getRed() * 0.2126 + color.getGreen() * 0.7152 + color.getBlue() * 0.0722)).intValue();// 将像素点的颜色设置为非黑即白if (gray > 100) {gray = 255;} else {gray = 0;}lightArray[y][x] = gray;}}int maxChangeCount = 0;int index = 0;for (int w = 1; w < width; w++) {int changeCount = 0;for (int h = 0; h < height; h++) {if (lightArray[h][w] == 0 && lightArray[h][w - 1] == 255) {changeCount++;}}if (changeCount > maxChangeCount) {maxChangeCount = changeCount;index = w;}}System.out.println(index - (offset == null ? 0 :offset));return index - (offset == null ? 0 :offset);} catch (Exception e) {e.printStackTrace();}return 0;}/*** 返回图片的字节数组* @param imageUrl 图片url地址* @param width 图片宽度* @param height 图片高度*/public static byte[] convertImageToByteArray(String imageUrl, int width, int height) {try {// 从 URL 加载图片URL url = new URL(imageUrl);InputStream inputStream = url.openStream();// 读取图片数据到 BufferedImageBufferedImage originalImage = ImageIO.read(inputStream);// 创建目标尺寸的 BufferedImageBufferedImage resizedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// 使用 Graphics2D 进行图片缩放Graphics2D graphics2D = resizedImage.createGraphics();graphics2D.drawImage(originalImage, 0, 0, width, height, null);graphics2D.dispose();// 将 BufferedImage 转换为字节数组ByteArrayOutputStream outputStream = new ByteArrayOutputStream();ImageIO.write(resizedImage, "jpg", outputStream);// 关闭输入流和输出流inputStream.close();outputStream.close();// 返回字节数组return outputStream.toByteArray();} catch (IOException e) {e.printStackTrace();}return null;}
}

 2.示例

        我是爬国外抖音的数据,经常会出现滑动验证码,就比如说,我要计算这个图片的缺口距离:


然后上面的代码算出来的距离:


结果只是相差了1px,但这个误差是可以接受的
 

        代码上面 340,212 是这个网页的验证码的div的高度跟宽带,例如这个的验证码:

那就要变成 260 跟 160 了,然后代码里面的 “4” 这个值是由你们自己调的,多练几次,这个值就很好确认了
 

3.原理

如何破解滑动验证码? | 未读代码
这篇文章要梯子才能访问

4.爬虫思路

        有人会说如果算出来的结果跟实际上移动的距离差几PX怎么办?

        我的解决方案是:在通过代码来定位要滑动的div来进行滑动验证,如果验证不正确,那就监听这个网页是否发起获取新的验证图片的请求,如果有,那就在监听器里面重复尝试破解,总会有成功的

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

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

相关文章

svg 属性详解:填充与边框

svg 属性详解&#xff1a;填充与边框 1 颜色和透明度2 填充规则 fill-rule3 边框样式3.1 stroke-width3.2 stroke-linecap3.3 stroke-linejoin3.4 stroke-dasharray 1 颜色和透明度 图像都有颜色&#xff0c;svg 中可以使用属性 fill 和 stroke 来修改图形的颜色。fill 属性设置…

【RSA加密算法进行数字签名并验签--C++】

RSA加密算法进行数字签名并验签--C 前言RSA加密算法什么是RSA加密算法公钥加密私钥解密or私钥加密公钥解密&#xff1f;公钥加密&#xff0c;私钥解密&#xff08;常见用法&#xff09;&#xff1a;私钥加密&#xff0c;公钥解密&#xff08;较少用法&#xff0c;本次使用&…

自动驾驶的决策层逻辑

作者 / 阿宝 编辑 / 阿宝 出品 / 阿宝1990 自动驾驶意味着决策责任方的转移 我国2020至2025年将会是向高级自动驾驶跨越的关键5年。自动驾驶等级提高意味着对驾驶员参与度的需求降低&#xff0c;以L3级别为界&#xff0c;低级别自动驾驶环境监测主体和决策责任方仍保留于驾驶…

两个近期的计算机领域国际学术会议(软件工程、计算机安全):欢迎投稿

近期&#xff0c;受邀担任两个国际学术会议的Special session共同主席及程序委员会成员&#xff08;TPC member&#xff09;&#xff0c;欢迎广大学界同行踊跃投稿&#xff0c;分享最新研究成果。期待这个夏天能够在夏威夷檀香山或者加利福尼亚圣荷西与各位学者深入交流。 SERA…

专业120+总分400+海南大学838信号与系统考研高分经验海大电子信息与通信

今年专业838信号与系统120&#xff0c;总分400&#xff0c;顺利上岸海南大学&#xff0c;这一年的复习起起伏伏&#xff0c;但是最后还是坚持下来的&#xff0c;吃过的苦都是值得&#xff0c;总结一下自己的复习经历&#xff0c;希望对大家复习有帮助。首先我想先强调一下专业课…

Github 2024-01-27 开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2024-01-27统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目3Jupyter Notebook项目2非开发语言项目2JavaScript项目1Go项目1Rust项目1Shell项目1 Papers We Lo…

【学网攻】 第(9)节 -- 路由器使用以及原理

系列文章目录 目录 系列文章目录 文章目录 前言 一、路由器是什么&#xff1f; 二、实验 1.引入 总结 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节 -- 交换机划分Vlan…

精品基于Uniapp+springboot助农管理系统App农产品积分购物商城

《[含文档PPT源码等]精品基于Uniappspringboot助农管理系统App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 后台框架&#xff1a;springboot、ssm 安卓…

鸿蒙HarmonyOS获取GPS精确位置信息

参考官方文档 #1.初始化时获取经纬度信息 aboutToAppear() {this.getLocation() } async getLocation () {try {const result await geoLocationManager.getCurrentLocation()AlertDialog.show({message: JSON.stringify(result)})}catch (error) {AlertDialog.show({message…

开源直播电商系统的实现方式(仿抖音电商模式)

当下&#xff0c;传统的图文电商模式正在走向没落&#xff0c;以“抖音”为首的直播电商模式备受用户追捧&#xff0c;它具有直观与互动的特点&#xff0c;拥有传统电商所不具备的优势。而且&#xff0c;当前正是直播电商的红利期&#xff0c;很多主播和品牌商都通过直播电商业…

fatal error:require():Failed opening required

今天部署网站遇到了个错误 fatal error:require():Failed opening required 这个错误经常遇到 大多是网站 是开启了 open_basedir 但今天这个错误很神奇 先说解决方法 1. 检测一下是不是真的 不存在这个文件 即使100%确定 也建议你再仔细看一下 这个文件存不存在 今天我遇…

【Unity3D日常开发】Unity3D中设置Text行首不出现标点符号

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在开发中会遇到Text的文本内容行首出现标点符号的情况&#xf…