您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a button to asiweb that clicks elements in sequence when enabled
// ==UserScript== // @name ASIWeb Auto Click Button // @namespace http://tampermonkey.net/ // @version 1.2 // @description Adds a button to asiweb that clicks elements in sequence when enabled // @author ils94 // @match https://asiweb.tre-rn.jus.br/asi/* // @grant GM_setValue // @grant GM_getValue // ==/UserScript== (function() { 'use strict'; const clickPaths = [ "/html/body/div[2]/form/div[3]/div/div/div[1]/ul[2]/li[1]/h3/a", "/html/body/div[2]/form/div[3]/div/div/div[1]/ul[2]/li[1]/div/ul[1]/li/div[2]/a", "/html/body/div[2]/div[3]/form/div[1]/div[2]/div[2]/p/span[1]/button", "/html/body/div[2]/div[3]/form/div[1]/div[2]/div[2]/div[3]/p/span[2]/button[1]", "/html/body/div[2]/div[3]/form/div[1]/div[2]/div[2]/p/span/button[1]" ]; function findElementByXPath(doc, xpath) { let element = null; try { element = doc.evaluate(xpath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; } catch (e) { console.log(`Error evaluating XPath ${xpath}:`, e); } if (!element) { const iframes = doc.getElementsByTagName('iframe'); for (let iframe of iframes) { try { const iframeDoc = iframe.contentDocument || iframe.contentWindow.document; element = iframeDoc.evaluate(xpath, iframeDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (element) break; element = findElementByXPath(iframeDoc, xpath); if (element) break; } catch (e) { console.log('Error accessing iframe:', iframe.src, e); } } } return element; } function simulateClick(element) { if (element) { try { element.click(); element.dispatchEvent(new Event('click', { bubbles: true })); console.log(`Clicked element:`, element); return true; } catch (e) { console.log(`Error clicking element:`, e); return false; } } return false; } function performClickForStep(step) { const xpath = clickPaths[step]; if (!xpath) { console.log('No more steps to execute.'); GM_setValue('clickStep', 0); GM_setValue('clickEnabled', false); // Desativa após último passo return false; } const element = findElementByXPath(document, xpath); console.log(`Attempting step ${step} at XPath ${xpath}:`, element); if (element) { if (simulateClick(element)) { const nextStep = step + 1; GM_setValue('clickStep', nextStep); console.log(`Step ${step} done. Advancing to step ${nextStep}`); if (nextStep >= clickPaths.length) { console.log('Last step reached. Disabling auto-click.'); GM_setValue('clickEnabled', false); // Desativa após último passo } return true; } } else { console.log(`Element not found for XPath ${xpath}. Will retry.`); } return false; } function addCustomButton() { const button = document.createElement('button'); button.textContent = 'Relação para o DB' button.style.position = 'fixed'; button.style.top = '10px'; button.style.right = '10px'; button.style.zIndex = '9999'; button.style.padding = '10px 20px'; button.style.backgroundColor = '#4CAF50'; button.style.color = 'white'; button.style.border = 'none'; button.style.borderRadius = '5px'; button.style.cursor = 'pointer'; button.style.fontSize = '16px'; button.onclick = function() { console.log('Botão ativado. Iniciando sequência...'); GM_setValue('clickStep', 0); GM_setValue('clickEnabled', true); retryActions(); }; document.body.appendChild(button); console.log('Botão personalizado adicionado à página.'); } function retryActions() { if (!GM_getValue('clickEnabled', false)) { return; } let attempts = 0; const maxAttempts = 60; const interval = setInterval(function() { if (attempts >= maxAttempts) { console.log('Número máximo de tentativas atingido.'); clearInterval(interval); return; } if (!GM_getValue('clickEnabled', false)) { clearInterval(interval); return; } const currentStep = GM_getValue('clickStep', 0); if (currentStep >= clickPaths.length) { console.log('Todos os passos concluídos.'); GM_setValue('clickStep', 0); GM_setValue('clickEnabled', false); clearInterval(interval); return; } if (performClickForStep(currentStep)) { clearInterval(interval); } attempts++; }, 500); } // MutationObserver para reagir a mudanças no DOM const observer = new MutationObserver(function() { if (GM_getValue('clickEnabled', false)) { retryActions(); } }); observer.observe(document, { childList: true, subtree: true }); // Adiciona o botão na inicialização window.addEventListener('load', () => { addCustomButton(); }); })();