极验geetest的使用

article/2025/9/10 16:21:31

项目中会遇到 滑块验证的需求:

前端vue里
1.新建/utils/gt3.js

"v0.4.8 Geetest Inc.";(function (window) {"use strict";if (typeof window === 'undefined') {throw new Error('Geetest requires browser environment');}var document = window.document;
var Math = window.Math;
var head = document.getElementsByTagName("head")[0];function _Object(obj) {this._obj = obj;
}_Object.prototype = {_each: function (process) {var _obj = this._obj;for (var k in _obj) {if (_obj.hasOwnProperty(k)) {process(k, _obj[k]);}}return this;}
};function Config(config) {var self = this;new _Object(config)._each(function (key, value) {self[key] = value;});
}Config.prototype = {api_server: 'api.geetest.com',protocol: 'http://',typePath: '/gettype.php',fallback_config: {slide: {static_servers: ["static.geetest.com", "dn-staticdown.qbox.me"],type: 'slide',slide: '/static/js/geetest.0.0.0.js'},fullpage: {static_servers: ["static.geetest.com", "dn-staticdown.qbox.me"],type: 'fullpage',fullpage: '/static/js/fullpage.0.0.0.js'}},_get_fallback_config: function () {var self = this;if (isString(self.type)) {return self.fallback_config[self.type];} else if (self.new_captcha) {return self.fallback_config.fullpage;} else {return self.fallback_config.slide;}},_extend: function (obj) {var self = this;new _Object(obj)._each(function (key, value) {self[key] = value;})}
};
var isNumber = function (value) {return (typeof value === 'number');
};
var isString = function (value) {return (typeof value === 'string');
};
var isBoolean = function (value) {return (typeof value === 'boolean');
};
var isObject = function (value) {return (typeof value === 'object' && value !== null);
};
var isFunction = function (value) {return (typeof value === 'function');
};
var MOBILE = /Mobi/i.test(navigator.userAgent);
var pt = MOBILE ? 3 : 0;var callbacks = {};
var status = {};var nowDate = function () {var date = new Date();var year = date.getFullYear();var month = date.getMonth() + 1;var day = date.getDate();var hours = date.getHours();var minutes = date.getMinutes();var seconds = date.getSeconds();if (month >= 1 && month <= 9) {month = '0' + month;}if (day >= 0 && day <= 9) {day = '0' + day;}if (hours >= 0 && hours <= 9) {hours = '0' + hours;}if (minutes >= 0 && minutes <= 9) {minutes = '0' + minutes;}if (seconds >= 0 && seconds <= 9) {seconds = '0' + seconds;}var currentdate = year + '-' + month + '-' + day + " " + hours + ":" + minutes + ":" + seconds;return currentdate;
}var random = function () {return parseInt(Math.random() * 10000) + (new Date()).valueOf();
};var loadScript = function (url, cb) {var script = document.createElement("script");script.charset = "UTF-8";script.async = true;// 对geetest的静态资源添加 crossOriginif ( /static\.geetest\.com/g.test(url)) {script.crossOrigin = "anonymous";}script.onerror = function () {cb(true);};var loaded = false;script.onload = script.onreadystatechange = function () {if (!loaded &&(!script.readyState ||"loaded" === script.readyState ||"complete" === script.readyState)) {loaded = true;setTimeout(function () {cb(false);}, 0);}};script.src = url;head.appendChild(script);
};var normalizeDomain = function (domain) {// special domain: uems.sysu.edu.cn/jwxt/geetest/// return domain.replace(/^https?:\/\/|\/.*$/g, ''); uems.sysu.edu.cnreturn domain.replace(/^https?:\/\/|\/$/g, ''); // uems.sysu.edu.cn/jwxt/geetest
};
var normalizePath = function (path) {path = path.replace(/\/+/g, '/');if (path.indexOf('/') !== 0) {path = '/' + path;}return path;
};
var normalizeQuery = function (query) {if (!query) {return '';}var q = '?';new _Object(query)._each(function (key, value) {if (isString(value) || isNumber(value) || isBoolean(value)) {q = q + encodeURIComponent(key) + '=' + encodeURIComponent(value) + '&';}});if (q === '?') {q = '';}return q.replace(/&$/, '');
};
var makeURL = function (protocol, domain, path, query) {domain = normalizeDomain(domain);var url = normalizePath(path) + normalizeQuery(query);if (domain) {url = protocol + domain + url;}return url;
};var load = function (config, send, protocol, domains, path, query, cb) {var tryRequest = function (at) {var url = makeURL(protocol, domains[at], path, query);loadScript(url, function (err) {if (err) {if (at >= domains.length - 1) {cb(true);// report gettype errorif (send) {config.error_code = 508;var url = protocol + domains[at] + path;reportError(config, url);}} else {tryRequest(at + 1);}} else {cb(false);}});};tryRequest(0);
};var jsonp = function (domains, path, config, callback) {if (isObject(config.getLib)) {config._extend(config.getLib);callback(config);return;}if (config.offline) {callback(config._get_fallback_config());return;}var cb = "geetest_" + random();window[cb] = function (data) {if (data.status == 'success') {callback(data.data);} else if (!data.status) {callback(data);} else {callback(config._get_fallback_config());}window[cb] = undefined;try {delete window[cb];} catch (e) {}};load(config, true, config.protocol, domains, path, {gt: config.gt,callback: cb}, function (err) {if (err) {callback(config._get_fallback_config());}});
};var reportError = function (config, url) {load(config, false, config.protocol, ['monitor.geetest.com'], '/monitor/send', {time: nowDate(),captcha_id: config.gt,challenge: config.challenge,pt: pt,exception_url: url,error_code: config.error_code}, function (err) {})
}var throwError = function (errorType, config) {var errors = {networkError: '网络错误',gtTypeError: 'gt字段不是字符串类型'};if (typeof config.onError === 'function') {config.onError(errors[errorType]);} else {throw new Error(errors[errorType]);}
};var detect = function () {return window.Geetest || document.getElementById("gt_lib");
};if (detect()) {status.slide = "loaded";
}window.initGeetest = function (userConfig, callback) {var config = new Config(userConfig);if (userConfig.https) {config.protocol = 'https://';} else if (!userConfig.protocol) {config.protocol = window.location.protocol + '//';}// for KFCif (userConfig.gt === '050cffef4ae57b5d5e529fea9540b0d1' ||userConfig.gt === '3bd38408ae4af923ed36e13819b14d42') {config.apiserver = 'yumchina.geetest.com/'; // for old jsconfig.api_server = 'yumchina.geetest.com';}if(userConfig.gt){window.GeeGT = userConfig.gt}if(userConfig.challenge){window.GeeChallenge = userConfig.challenge}if (isObject(userConfig.getType)) {config._extend(userConfig.getType);}jsonp([config.api_server || config.apiserver], config.typePath, config, function (newConfig) {var type = newConfig.type;var init = function () {config._extend(newConfig);callback(new window.Geetest(config));};callbacks[type] = callbacks[type] || [];var s = status[type] || 'init';if (s === 'init') {status[type] = 'loading';callbacks[type].push(init);load(config, true, config.protocol, newConfig.static_servers || newConfig.domains, newConfig[type] || newConfig.path, null, function (err) {if (err) {status[type] = 'fail';throwError('networkError', config);} else {status[type] = 'loaded';var cbs = callbacks[type];for (var i = 0, len = cbs.length; i < len; i = i + 1) {var cb = cbs[i];if (isFunction(cb)) {cb();}}callbacks[type] = [];}});} else if (s === "loaded") {init();} else if (s === "fail") {throwError('networkError', config);} else if (s === "loading") {callbacks[type].push(init);}});};})(window);

2.mixins文件夹下

imgCode接口返回的数据

 


import "@/utils/gt3";
import { imgCode } from "@/api/login";
export default {data() {return {codeForm: {}, //极验codeDone: false,codeCallBack: false,//验证成功回调处理逻辑//geeType:'',//类型 注册bind 登录popup}},methods: {async getCode() {const { gt, challenge, offline, uuid } = await imgCode();this.codeForm = { uuid: uuid };initGeetest({//此部分配置来自服务端 SDKgt: gt,challenge: challenge,offline: offline,new_captcha: true,//product: this.geeType,width: "100%",},(captchaObj) => {captchaObj.appendTo("#geetest-box"); //把图形渲染到对应的dom元素中});},},
}

3.目标文件.vue里 

<template><div class="dashboard-container"><div class="app-container"><div class="form-box"><el-form ref="CusruleForm" :model="cusForm"><el-form-item ref="userName" prop="userName"><el-input v-model="cusForm.userName" placeholder="请输入客户账号" /></el-form-item><el-form-item ref="password" prop="password"><el-input placeholder="请输入登录密码" v-model="cusForm.password" /></el-form-item></el-form>//这里显示极验验证<div class="geetest-box" id="geetest-box"></div></div></div></div>
</template><script>
import mixin from "@/mixins/geetest";
export default {mixins: [mixin],// 客户信息data() {return {cusForm: {userName: "",password: "",},};},created() {this.geeType = "popup";this.getCode();},methods: {test() {this.getCode();},},
};
</script>
<style lang="scss" scoped>
.geetest-box {min-height: 60px;
}
</style></style>


http://chatgpt.dhexx.cn/article/sDV5JSSh.shtml

相关文章

爬虫进阶教程:极验(GEETEST)验证码破解教程

摘要: 爬虫最大的敌人之一是什么&#xff1f;没错&#xff0c;验证码&#xff01;Geetest作为提供验证码服务的行家&#xff0c;市场占有率还是蛮高的。遇到Geetest提供的滑动验证码怎么破&#xff1f;授人予鱼不如授人予渔&#xff0c;接下来就为大家呈现本教程的精彩内容。 一…

【已解决】安卓手机的GeeTest文件夹是什么

网上关于安卓系统手机的GeeTest目录是什么的文章和帖子&#xff0c;绝大部分打着GeeTest的标题&#xff0c;内容都是牛头不对马嘴&#xff0c;答非所问&#xff0c;没一个能解释清楚。 我刚刚找到了正式的答复如下&#xff1a; Android 手机上的“geetest”目录与名为“极验”的…

正定二次型与半正定二次型

对于实二次型其中A是实对称的&#xff0c;下列条件等价&#xff1a; 正定的 &#xff08;1&#xff09;是正定的. &#xff08;2&#xff09;它的正惯性指数p等于n. &#xff08;3&#xff09;有可逆实矩阵C&#xff0c;使得其中 &#xff08;4&#xff09;实对称矩阵A是正…

怎么对document.write写出来的内容调整对齐方式_【求职技巧】给少数人:硅谷BAT级别的简历这么写...

我什么都不会”,“我什么都没干”,“这个项目很水”,这是我在帮别人修改简历时听到的最多的几句话。难道你真的什么都不会吗?真的什么都没干吗?真的很水吗?其实很多情况下,是这样的。 但是很水就放弃治疗了吗?不会的。放下无谓的抱怨和遗憾,好好梳理自己,认真编…

c语言八皇后问题经典算法,经典算法之八皇后问题

八皇后问题是一个古老而又著名的问题&#xff0c;是学习回溯算法的一个经典案例。今天我们就一起来探究一下吧&#xff01; 时间退回到1848年&#xff0c;国际西洋棋棋手马克斯贝瑟尔提出了这样的一个问题&#xff0c; 在88格的国际象棋上摆放八个皇后&#xff0c;使其不能互相…

从八皇后问题思考回溯法

一、八皇后问题 八皇后是经典的回溯法问题&#xff0c;题目是说将八个皇后&#xff0c;放到88的国际象棋棋盘中中&#xff0c;使得任意两个皇后都不能在同一行、同一列以及同一条对角线上。下图是一个四皇后的搜索示意图。 八皇后问题可以通过暴力法求解&#xff0c;代码也很…

八皇后问题(Python)

一.问题简介 八皇后问题&#xff1a; 如何能在 8*8 的国际象棋棋盘上放置八个皇后&#xff0c;使得任何一个皇后都无法直接吃掉其他的皇后&#xff1f;为了到达此目的&#xff0c;任两个皇后都不能处于同一条横行、纵行或斜线上。 二.几种思路和方法 1.回溯法递归思想 如图所…

八皇后问题详解(四种解法)

所有源码都在github上(https://github.com/seasonyao/eight_queen_question) 如果你去百度百科八皇后这个问题,你会发现人家也是历史上有头有脸的一个问题,最后一句“计算机发明后就有一万种方式解决这个问题”读起来也让程序猿们很快活。闲话少说,开始阐述我的思路: 最…

八皇后问题

八皇后问题 八皇后问题(英文:Eight queens)&#xff0c;是由国际西洋棋棋手马克斯贝瑟尔于1848年提出的问题&#xff0c;是回溯算法的典型案例。 问题表述为:在88格的国际象棋上摆放8个皇后&#xff0c;使其不能互相攻击&#xff0c;即任意两个皇后都不能处于同一行、同一列或…

八皇后问题(适合初学者的写法)C语言

什么是八皇后问题&#xff1a; 八皇后问题&#xff0c;是一个古老而著名的问题&#xff0c;是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯贝瑟尔于1848年提出&#xff1a;在88格的国际象棋上摆放八个皇后&#xff0c;使其不能互相攻击&#xff0c;即任意两个皇后都不能…

八皇后问题,秒懂递归回溯(有图详解|c语言)

目录 &#x1f478;&#x1f3fb;前言 &#x1f478;&#x1f3fb;题目介绍 &#x1f478;&#x1f3fb;引入&#xff1a; &#x1f478;&#x1f3fb;解决思路&#xff1a; &#x1f478;&#x1f3fb;理论存在&#xff0c;实践开始&#xff01; &#x1f478;&#x1f…

利用ngrok实现域名映射局域网ip

前言 相信很多开发者都有这样的需求&#xff0c;需要让外网访问你本地的服务器&#xff0c;方便调试本地代码&#xff0c;或者让别人体验到自己做的应用。那么这时&#xff0c;我们需要做的就是将我们本地的端口映射到一个外网的端口上&#xff0c;也就是内网穿透。常见的解决…

python调用手机摄像头,实现实时调用摄像头,需要你的电脑和手机在同一个局域网内

1、android手机上安装一款APP&#xff1a;IP摄像头&#xff0c;app的图片如上图 2.调用代码如下 import cv2cv2.namedWindow("camera", 1) # 开启ip摄像头 video "http://admin:admin10.0.0.32:8081/" # 此处后的ipv4 地址需要改为app提供的地址 cap c…

02、处于不同局域网下的Socket通信(网络部分理论知识)

目录 一、服务器 1、服务器的种类和功能 2、服务器的操作系统 3、IIs、Apache、Tomcat 4、云服务器 弹性云服务器&#xff08;Elastic Cloud Server&#xff0c;ECS&#xff09; 云服务器安全组 二、OSI七层模型与TCP/IP五层模型 三、外网、内网、公网、私网 内网穿透…

使用wireshark抓取聊天信息(局域网内的udp通信)

文章目录 1&#xff0c;实验目的2&#xff0c;实验操作3&#xff0c;总结4&#xff0c;附件 1&#xff0c;实验目的 1.分析这程序所采用的是udp还是tcp 2.在抓取包中找到窃取到的聊天信息 (英文字符和汉字可能经过了某种编码转换&#xff0c;数据包中不是明文) 3.如果是网络连…

安装黑群晖找不到局域网电脑_黑群晖洗白太复杂?我用蒲公英P5轻松实现

前言: 随着网盘时代的结束,剩下的网盘供应商又开启了垄断方式,所以越来越多的小伙伴开始自己组自己的家庭NAS网络存储服务器。比如笔者的一个好基友就是如此。其实开始笔者是想让他直接一步到位,买群晖或者铁威马的NAS,在放入硬盘就可“一劳永逸”。然而,这个小伙伴看到了…

内网穿透实现局域网内搭建私服务器

使用云服务器实现内网穿透。内网里建立一台老旧win机专门用来挂pt&#xff0c;在上面存储视频和软件&#xff0c;而后映射在外网中&#xff0c;通过手机和电脑随时随地的下载和在线观看win机上的视频和文件。 1、修改ssh的默认端口 在公网中使用常用软件的默认端口会导致自己的…

局域网终结者_p2p终结者怎么安装使用 p2p终结者安装使用方法【介绍】

p2p终结者是一款局域网控制软件&#xff0c;他的主要功能就是控制和限制同一个局域网内其它的上网用户&#xff0c;如限制不让别人上QQ&#xff0c;不让别人开网页和不让别人下载&#xff0c;只要他和你在同一网之内你就可以控制他&#xff0c;并且神奇的是&#xff0c;不需要动…

Kali Linux-MSF远控局域网手机

前言 严正声明&#xff1a;本文仅限于技术讨论与分享&#xff0c;严禁用于非法途径。 本文目的&#xff1a;演示如何借助Kali Linux系统的Metasploit渗透测试框架生成远程控制程序&#xff0c;然后感染局域网内的Android手机&#xff0c;从而实现对目标手机数据的读取、音频的…

超级眼局域网监控软件 员工禁止软件 可以控制时间段

第一步&#xff1a; 下载超级眼局域网监控软件&#xff1a; 将经理端安装在管理者的电脑上&#xff0c;员工端安装在需要被监控者的电脑上。 第二步&#xff1a;在经理端电脑上操作。打开管理端软件&#xff0c;扫描所有的被控电脑。然后选择需要管理的电脑&#xff08;可以全选…