ddnsto icon indicating copy to clipboard operation
ddnsto copied to clipboard

油猴脚本+server酱微信推送,实现快速验证DDNSTO

Open yangshare opened this issue 2 years ago • 4 comments

效果预览

QQ录屏20220402160819 00_00_52-00_01_10 00_00_00-00_00_30

server酱官网

https://sct.ftqq.com/

油猴脚本

// ==UserScript==
// @name         DDNSTO自动登录
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       yangc
// @match        https://www.kooldns.cn/app/#/login
// @match        https://www.ddnsto.com/app/#/login
// @icon         https://www.ddnsto.com/app/favicon.ico
// @grant        unsafeWindow
// @grant        GM_xmlhttpRequest
// @require      https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js
// @require      https://cozmo.github.io/jsQR/jsQR.js
// ==/UserScript==
(function() {
    'use strict';
    var name="杨成的DDNSTO验证请求"
    // 返回 web 主机的域名,如:http://127.0.0.1:8080/testdemo/test.html?id=1&name=test
    var url = window.location.href;
    var setTimeOut
    //登录页面才执行
    if(url.indexOf('https://www.kooldns.cn/app/#/login')>=0||url.indexOf('https://www.ddnsto.com/app/#/login')>=0){
        /*$("#app").bind("click", function (event) {
            var clickedNode = event.target;
            base64ToqR(clickedNode.src)
        })
        $("body").append('<h1 class="header" style="text-align: center;    width: 100%;    position: absolute;    top: 10px;  color: red;">点击二维码即可自动登录</h1>')
        */
        $("body").append('<canvas id="qrcanvas" style="display:none"></canvas>')

        setTimeOut=setTimeout(changeState,2000 );
    }else{
        //console.log("不属于自动化页面!!!")
    }

    //定时器
    function changeState(){
        //alert( $("#app").html())
        var _img=$("#qrcode>img")[0]
        base64ToqR(_img.src)
        if(_img.src==''){
            setTimeOut=setTimeout(changeState,2000 );
        }
        //console.log(_img.src)
    }

    //识别二维码
    function base64ToqR(data) {
        var c = document.getElementById("qrcanvas");
        var ctx = c.getContext("2d");

        var img = new Image();
        img.src = data;
        img.onload = function() {
            $("#qrcanvas").attr("width",img.width)
            $("#qrcanvas").attr("height",img.height)
            ctx.drawImage(img, 0, 0, img.width, img.height);
            var imageData = ctx.getImageData(0, 0, img.width, img.height);
            const code = jsQR(imageData.data, imageData.width, imageData.height, {
                inversionAttempts: "dontInvert",
            });
            if(code){
                sendQrUrl(code.data)
            }else{
                alert("识别二维码错误,请联系管理员!!!")
            }
        };
    }

    //发起sever酱推送
    function sendQrUrl(code){
        console.log(code)
        code=encodeURIComponent(code)
        //通过post请求将登录请求转发到server酱
        GM_xmlhttpRequest({
            method: "POST",
            url: "https://sctapi.ftqq.com/<SENDKEY>.send",
            data: "title="+name+"&desp="+code,
            headers: {
                "Content-Type": "application/x-www-form-urlencoded",
                "charset":"utf-8"
            },
            onload: function(response) {
                console.log(response.responseText)
                var rtn=JSON.parse(response.responseText);
                var errorinfo= rtn.data.error;
                console.log(errorinfo)
                if("SUCCESS"===errorinfo){
                    alert("DDNSTO验证请求发送成功,稍等片刻即将跳转!!!")
                }else{
                    alert("DDNSTO验证失败,刷新页面重试")
                }
            }
        });
    }

})();

yangshare avatar Apr 02 '22 08:04 yangshare

写个说明文档吧,复制过去改了 SENDKEY 没反应呀

sxgpcg avatar Apr 16 '22 12:04 sxgpcg

写个说明文档吧,复制过去改了 SENDKEY 没反应呀

我原本没人用就没再把改良版上传,复制下面这个吧

// ==UserScript==
// @name         DDNSTO自动登录
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       yangc
// @match        https://www.kooldns.cn/app/*
// @match        https://www.ddnsto.com/app/*
// @icon         https://www.ddnsto.com/app/favicon.ico
// @grant        unsafeWindow
// @grant        GM_xmlhttpRequest
// @require      https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js
// @require      https://cozmo.github.io/jsQR/jsQR.js
// ==/UserScript==
(function() {
    'use strict';
    var name="yangshare的DDNSTO验证请求"
    // 返回 web 主机的域名,如:http://127.0.0.1:8080/testdemo/test.html?id=1&name=test
    var url = window.location.href;
    //轮询器
    var setInterVal
    //轮询次数(兼容跳转成功后URL还是https://www.ddnsto.com/app/#/devices轮询器无法关闭的情况)
    var number=5
    //如果是登录页面或者是登录前面一个页面才执行自动识别二维码
    if(url.indexOf('https://www.kooldns.cn/app/#/login')>=0||url.indexOf('https://www.ddnsto.com/app/#/login')>=0||url.indexOf('https://www.ddnsto.com/app/#/devices')>=0){
        //绘制二维码容器
        $("body").append('<canvas id="qrcanvas" style="display:none"></canvas>')
        setInterVal=setInterval(changeState,2000);
    }
    else{
        console.log("不属于自动化页面!!!"+url)
    }

    //定时器
    function changeState(){
        number=number-1
        if(number<=0){
            // 取消该定时设置
            clearInterval(setInterVal);
        }
        //console.log( $("#app").html())
        var _img=$("#qrcode>img")[0]
        base64ToqR(_img.src)
        //console.log(_img.src)
    }

    //识别二维码
    function base64ToqR(data) {
        // 取消该定时设置
        clearInterval(setInterVal);
        var c = document.getElementById("qrcanvas");
        var ctx = c.getContext("2d");

        var img = new Image();
        img.src = data;
        img.onload = function() {
            $("#qrcanvas").attr("width",img.width)
            $("#qrcanvas").attr("height",img.height)
            ctx.drawImage(img, 0, 0, img.width, img.height);
            var imageData = ctx.getImageData(0, 0, img.width, img.height);
            const code = jsQR(imageData.data, imageData.width, imageData.height, {
                inversionAttempts: "dontInvert",
            });
            if(code){
                sendQrUrl(code.data)
            }else{
                alert("识别二维码错误,请联系管理员!!!")
            }
        };
    }

    //发起sever酱推送
    function sendQrUrl(code){
        console.log(code)
        code=encodeURIComponent(code)
        //通过post请求将登录请求转发到server酱
        GM_xmlhttpRequest({
            method: "POST",
            url: "https://sctapi.ftqq.com/<SENDKEY>.send",
            data: "title="+name+"&desp="+code,
            headers: {
                "Content-Type": "application/x-www-form-urlencoded",
                "charset":"utf-8"
            },
            onload: function(response) {
                console.log(response.responseText)
                var rtn=JSON.parse(response.responseText);
                var errorinfo= rtn.data.error;
                console.log(errorinfo)
                if("SUCCESS"===errorinfo){
                    alert("DDNSTO验证请求发送成功,稍等片刻即将跳转!!!")
                }else{
                    alert("DDNSTO验证失败,刷新页面重试")
                }
            }
        });
    }

})();

yangshare avatar Apr 16 '22 13:04 yangshare

XiKL219H avatar Apr 29 '22 10:04 XiKL219H

怎么用的,用不来

3TUF1VE avatar May 03 '22 06:05 3TUF1VE