好友
阅读权限20
听众
最后登录1970-1-1
|
本帖最后由 chh322 于 2024-8-8 16:09 编辑
当前网页存在文字元素放 include
不可以存在什么文字元素放 exclude
程序点击文字放 click
// 多组关键字设置
const criteriaSets = [
{
include: ['返回主页'],
exclude: ['404网页错误'],
click: ['返回主页']
},
当前网站有返回主页文字,不存在网页错误文字,点击"返回主页"文字链接 下会变第二个页面或跳转
{
include: ['手动清空'],
exclude: ['404网页错误'],
click: ['手动清空']
},
当前网站有手动清空文字,不存在网页错误文字,点击"手动清空"文字链接 下会变第二个页面或跳转
// 多组关键字设置
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次循环');
}
})();
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|