Greasy Fork

Greasy Fork is available in English.

Vikacg小助手

受不了这些下载页面的该死广告,简直和畜生一样点一下直接跳转到其他黄网了,所以这个脚本就诞生了。目前1.2版本,修复了在.xyz网页主页不能清除广告的bug,添加了主页自动签到功能

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Vikacg小助手
// @namespace    http://reiz-l.github.io
// @version      1.2.1
// @description  受不了这些下载页面的该死广告,简直和畜生一样点一下直接跳转到其他黄网了,所以这个脚本就诞生了。目前1.2版本,修复了在.xyz网页主页不能清除广告的bug,添加了主页自动签到功能
// @author       Takesita
// @match        http://www.vikacg.xyz/*
// @match        http://www.vikacg.com/*
// @match        https://www.vikacg.xyz/*
// @match        https://www.vikacg.com/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';
    var url_current = window.location.href;
    if (url_current.indexOf("external?e=") != -1){
        function waitForXPath(xpath, callback) {
            var interval = setInterval(function() {
                var element = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
                if (element) {
                    clearInterval(interval);
                    callback(element);
                }
            }, 100); // 调整轮询间隔
        }

        waitForXPath('//*[@id="app"]/div[2]/div[1]/div/div/div[3]/div[2]/div/div/div/div/div', function(element) {
            // 在这里执行你的脚本逻辑
            const XpathExpression = '//*[@id="app"]/div[2]/div[1]/div/div/div[2]/div[2]/div/div/div/div/div[1]/p';
            const pElement = document.evaluate(XpathExpression, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

            if (pElement) {
                const content = pElement.textContent.trim();
                console.log('Content of <p> element:', content);
                var cleanedURL = content.replace('正在检查:', '');
                //alert('反外部链接广告插件为您直接跳转:\n' + cleanedURL)
                
                // 获取网页的宽度和高度
                let pageWidth = window.innerWidth;
                let pageHeight = window.innerHeight;

                // 创建一个 div 元素
                let div = document.createElement("div");

                // 设置 div 的宽度、高度、背景颜色和边框
                div.style.width = "320px";
                div.style.height = "128px";
                div.style.backgroundColor = "white";
                div.style.border = "1px solid black";

                // 创建一个 p 元素
                let p = document.createElement("p");

                // 设置 p 的文本内容和字体大小
                p.textContent = "已为您自动跳转!";
                p.style.fontSize = "24px";

                // 将 p 元素添加到 div 元素中
                div.appendChild(p);

                // 将 div 元素添加到网页的 body 元素中
                document.body.appendChild(div);

                // 计算 div 元素的左上角坐标,使其居中显示
                let divLeft = (pageWidth - 320) / 2;
                let divTop = (pageHeight - 128) / 2;

                // 设置 div 元素的位置
                div.style.position = "absolute";
                div.style.left = divLeft + "px";
                div.style.top = divTop + "px";
                window.open('https://'+cleanedURL, '_blank');

            } else {
                console.error('Could not find <p> element using XPath.');
                alert('没有找到外部链接.');
            }
            console.log('没找到元素:', element);
        });
        //通过xpath来提取内容
    }
    //首页
    else if (url_current == "https://www.vikacg.xyz/post" || url_current == "https://www.vikacg.com/post") {

        function waitForXPath(xpath, callback) {
            var interval = setInterval(function() {
                var element = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
                if (element) {
                    clearInterval(interval);
                    callback(element);
                }
            }, 100); // 调整轮询间隔
        }
        waitForXPath('//*[@id="app"]/div[2]/div[3]/div[5]/div[2]/div/div[1]/div[1]/div[2]/div/strong/span/span' , function(){
            // 定义两个 xpath,分别对应两个 div 元素
            var xpath1 = '//*[@id="app"]/div[2]/div[3]/div[6]';
            var xpath2 = '//*[@id="app"]/div[2]/div[3]/div[2]';
            var xpath3 = '//*[@id="app"]/div[2]/div[3]/div[4]';

            // 使用 document.evaluate 方法,获取两个元素的引用
            var element1 = document.evaluate(xpath1, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
            var element2 = document.evaluate(xpath2, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
            var element3 = document.evaluate(xpath3, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
            // 如果想要销毁元素,可以使用 removeChild 或 remove 方法
            element1.parentNode.removeChild(element1);
            element2.parentNode.removeChild(element2);
            element3.parentNode.removeChild(element3);

            // 如果想要隐藏元素,可以使用 style 属性设置 display:none
            //element1.style.display = "none";
            //element2.style.display = "none";

        });

        waitForXPath('//*[@id="app"]/div[2]/div[3]/div[2]' ,function(){
            var xpath4 = '//*[@id="app"]/div[2]/div[3]/div[2]';
            var element4 = document.evaluate(xpath3, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
            element4.parentNode.removeChild(element4);
        });

        //自动签到功能
        // 获取要模拟点击的按钮元素
        waitForXPath('//*[@id="app"]/div[2]/div[3]/div[3]/div[2]/div/div[3]/a[1]/button' ,function(){
            var xpath_qd = '//*[@id="app"]/div[2]/div[3]/div[3]/div[2]/div/div[3]/a[1]/button'; 
            var xpath_qdtxt = '//*[@id="app"]/div[2]/div[3]/div[3]/div[2]/div/div[3]/a[1]/button/span/span';
            let button = document.evaluate(xpath_qd, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
            let bt_txt = document.evaluate(xpath_qdtxt,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
            let bt_content = bt_txt.nodeType === Node.TEXT_NODE ? bt_txt.nodeValue : bt_txt.innerText;
            if (bt_content == "点击领取今天的积分签到") {
                
                // 创建一个 click 事件对象
                let event = new MouseEvent("click", {
                    bubbles: true, // 事件是否冒泡
                    cancelable: true, // 事件是否可取消
                    view: window // 事件的视图
                });

                // 调用按钮元素的 click 方法,或者触发 click 事件
                button.click(); // 或者 button.dispatchEvent(event);
                console.log("自动签到:进入页面");
            } else {
                alert('今日已签到!');
            }
        });
        
        
    }
    //签到
    else if(url_current == "https://www.vikacg.xyz/wallet/mission"){
        function waitForXPath(xpath, callback) {
            var interval = setInterval(function() {
                var element = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
                if (element) {
                    clearInterval(interval);
                    callback(element);
                }
            }, 100); // 调整轮询间隔
        }

        waitForXPath('//*[@id="preview-input-dynamic"]/div/table/tbody/tr[1]/td[1]/div',function() {
            var xpath = '//*[@id="app"]/div[2]/div[3]/div/div[2]/div[2]';
            var ad = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
            ad.parentNode.removeChild(ad);
        });

        waitForXPath('//*[@id="preview-input-dynamic"]/div[1]/div[2]/div[2]/button[2]',function () {
            var xpath_qdbt = '//*[@id="preview-input-dynamic"]/div[1]/div[2]/div[2]/button[2]';
            let element_bt = document.evaluate(xpath_qdbt, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
            //let element_bttx = document.evaluate('',document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null),singleNodeValue;
            let bt_content1 = element_bt.nodeType === Node.TEXT_NODE ? element_bt.nodeValue : element_bt.innerText;
            if (bt_content1 == '立即签到') {
                // 创建一个 click 事件对象
                let event = new MouseEvent("click", {
                    bubbles: true, // 事件是否冒泡
                    cancelable: true, // 事件是否可取消
                    view: window // 事件的视图
                });

                // 调用按钮元素的 click 方法,或者触发 click 事件
                element_bt.click(); // 或者 button.dispatchEvent(event);
                console.log("自动签到结束");
            } else {
                alert("你早就签到了,无法再自动签到了。");
            }
        });
    }
    //文章
    else if(url_current.indexOf(".xyz/p/") != -1 || url_current.indexOf(".com/p/") != -1){
        function waitForXPath(xpath, callback) {
            var interval = setInterval(function() {
                var element = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
                if (element) {
                    clearInterval(interval);
                    callback(element);
                }
            }, 100); // 调整轮询间隔
        }
        waitForXPath('//*[@id="app"]/div[2]/div[3]/div/div[1]/div[1]/div/div[1]/div[3]/div[1]/div',function() {
            var xp = '//*[@id="app"]/div[2]/div[3]/div/div[1]/div[1]/div/div[1]/div[3]/div[1]/div';
            var ad = document.evaluate(xp, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
            ad.parentNode.removeChild(ad);

            var xp2 = '//*[@id="app"]/div[2]/div[3]/div/div[1]/div[2]'
            var ad2 = document.evaluate(xp2, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
            ad2.parentNode.removeChild(ad2);
        });

    }

})();