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();
});
})();