吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1452|回复: 18
收起左侧

[其他原创] 浏览器X猴插件脚本,自动点击符合文字的元素,带有开始/停止开关,支持多组关键字列表

  [复制链接]
chh322 发表于 2024-8-8 15:32
本帖最后由 chh322 于 2024-8-8 16:09 编辑

微信图片_20240808154749.png
当前网页存在文字元素放         include
不可以存在什么文字元素放     exclude
程序点击文字放                        click

// 多组关键字设置
    const criteriaSets = [
        {
            include: ['返回主页'],
            exclude: ['404网页错误'],
            click: ['返回主页']
        },              
当前网站有返回主页文字,不存在网页错误文字,点击"返回主页"文字链接  下会变第二个页面或跳转
        {
            include: ['手动清空'],
            exclude: ['404网页错误'],
            click: ['手动清空']
        },
当前网站有手动清空文字,不存在网页错误文字,点击"手动清空"文字链接  下会变第二个页面或跳转

222.png
    // 多组关键字设置
    const criteriaSets = [
        {
            include: ['帮我写作'],
            exclude: ['404网页错误'],
            click: ['帮我写作']
        },
        {
            include: ['图像生成'],
            exclude: ['404网页错误'],
            click: ['图像生成']
        },
如果写成这样 就来回点

[JavaScript] 纯文本查看 复制代码
// ==UserScript==
// @name         自动点击符合条件的元素
// @namespace    http://your-custom-namespace/
// @version      1.10
// @description  自动点击符合条件的元素,带有开始/停止开关,支持多组关键字列表,适用于多个网址
// @author       You
// @match        *://*/*
// @grant        GM_registerMenuCommand
// @grant        GM_unregisterMenuCommand
// ==/UserScript==

(function() {
    'use strict';

    let isRunning = localStorage.getItem('isRunning') === 'true';
    let toggleCommandId;

    // 多组关键字设置
    const criteriaSets = [
        {
            include: ['返回主页'],
            exclude: ['404网页错误'],
            click: ['返回主页']
        },
        {
            include: ['手动清空'],
            exclude: ['404网页错误'],
            click: ['手动清空']
        },
        // 可以继续添加更多的关键字组
    ];

    // 支持的元素选择器
    const elementSelectors = [
        'a', 'div', 'button', 'span', 'li' // 可以添加更多的选择器
    ];

    // 注册菜单命令
    function registerMenuCommands() {
        toggleCommandId = GM_registerMenuCommand(isRunning ? '停止' : '开始', toggleScript);
    }

    // 切换脚本状态
    function toggleScript() {
        isRunning = !isRunning;
        localStorage.setItem('isRunning', isRunning.toString());
        console.log(`脚本已${isRunning ? '启动' : '停止'}`);
        updateMenuCommands();
        if (isRunning) {
            runScript();
        }
    }

    // 更新菜单命令
    function updateMenuCommands() {
        GM_unregisterMenuCommand(toggleCommandId);
        registerMenuCommands();
    }

    // 初始化菜单命令
    registerMenuCommands();

    // 如果脚本在重新加载后处于运行状态,启动脚本
    if (isRunning) {
        runScript();
    }

    // 等待函数
    function wait(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
    }

    // 检查并执行点击操作
    async function checkTextAndAct(criteria) {
        console.log(`处理关键字组:包含关键字 [${criteria.include.join(', ')}],排除关键字 [${criteria.exclude.join(', ')}],点击关键字 [${criteria.click.join(', ')}]`);

        // 遍历所有的元素选择器
        for (const selector of elementSelectors) {
            // 获取当前选择器下的所有元素
            let elements = document.querySelectorAll(selector);

            // 遍历所有的元素
            for (let element of elements) {
                // 获取元素的文本内容
                let elementText = element.textContent.trim();

                // 检查文本是否符合当前关键字组的条件
                let includeMatch = criteria.include.every(keyword => elementText.includes(keyword));
                let excludeMatch = criteria.exclude.every(keyword => !elementText.includes(keyword));

                if (includeMatch && excludeMatch) {
                    // 如果文本符合条件,则检查是否包含点击关键字
                    if (criteria.click.some(keyword => elementText.includes(keyword))) {
                        // 确保元素在视图中
                        element.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'center' });

                        // 输出元素状态
                        console.log('元素状态:', {
                            display: getComputedStyle(element).display,
                            visibility: getComputedStyle(element).visibility,
                            opacity: getComputedStyle(element).opacity,
                            pointerEvents: getComputedStyle(element).pointerEvents
                        });

                        // 尝试点击操作
                        try {
                            // 确保页面稳定后再点击
                            await wait(500); // 等待0.5秒
                            element.click();
                            console.log('已点击元素: ', element); // 打印确认点击操作
                        } catch (error) {
                            console.error('点击操作失败:', error); // 捕获点击失败的错误
                        }

                        // 检查元素是否仍然存在
                        function checkElementExists() {
                            let elements = document.querySelectorAll(selector);
                            return Array.from(elements).some(e => criteria.click.some(keyword => e.textContent.trim().includes(keyword)));
                        }

                        // 等待1秒,最多等待5次
                        for (let checkCount = 0; checkCount < 5; checkCount++) {
                            if (checkElementExists()) {
                                console.log('元素仍然存在,等待1秒...');
                            } else {
                                console.log('元素不再存在,跳出循环');
                                return; // 元素不再存在时跳出循环
                            }
                            console.log(`已循环 ${checkCount + 1} 次`);
                            await wait(1000); // 等待1秒
                        }
                        console.log('已循环5次,跳出循环');
                        return; // 执行完点击操作后退出函数
                    }
                }
            }
        }
        console.log('没有找到符合条件的元素'); // 打印调试信息,表明没有找到符合条件的元素
    }

    // 脚本主逻辑
    async function runScript() {
        for (let i = 0; i < 50; i++) {
            if (!isRunning) return;
            console.log(`第 ${i + 1} 次循环`);
            // 遍历所有的关键字组
            for (let criteria of criteriaSets) {
                if (!isRunning) return;
                await checkTextAndAct(criteria); // 处理当前关键字组
                console.log('检查完毕,等待1秒');
                await wait(1000); // 每组关键字处理完后等待1秒
            }
            console.log('循环结束,等待1秒再继续'); // 打印调试信息,表明循环结束
            await wait(1000); // 等待1秒再继续运行脚本
        }
        isRunning = false; // 循环结束后自动停止脚本
        localStorage.setItem('isRunning', 'false');
        updateMenuCommands(); // 更新菜单命令
        console.log('脚本已完成50次循环');
    }
})();

免费评分

参与人数 6吾爱币 +12 热心值 +5 收起 理由
远方呢 + 1 + 1 我很赞同!
Cghunter + 1 + 1 用心讨论,共获提升!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
抱歉、 + 1 用心讨论,共获提升!
baliao + 1 + 1 我很赞同!
shierai520 + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| chh322 发表于 2024-8-8 15:38
thef09 发表于 2024-8-8 15:36
哪些算是符合条件的元素

当前网页存在文字元素放         include:存在元素
不可以存在什么文字元素放     exclude: ['404网页错误'],
程序点击文字放                        click: ['返回主页']    可以放多组
 楼主| chh322 发表于 2024-8-8 16:09
baliao 发表于 2024-8-8 16:05
请问有些网站视频需要点播放才播放, 这个脚本可以实现吗? 谢谢!

这个是文字点击 你说的播放要分析 再结合下就可以实现你要的效果 我的最终也是为了点击视频及输入相关内容
sondycnc 发表于 2024-8-8 15:34
thef09 发表于 2024-8-8 15:36
哪些算是符合条件的元素
kangta520 发表于 2024-8-8 15:45
效果图放出来看看
iz999 发表于 2024-8-8 16:04
有效果图吗?
baliao 发表于 2024-8-8 16:05
请问有些网站视频需要点播放才播放, 这个脚本可以实现吗? 谢谢!
cloudfend 发表于 2024-8-8 16:13

有网站效果图放出来看看吗
csku2006 发表于 2024-8-8 16:18
没开出来这个插件是干嘛用的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 17:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表