Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==========================================
- // CRIADO POR ANTONIO PEDRO - 2025
- // ==========================================
- (async function() {
- // CONFIGURAÇÃO INICIAL
- let prefix = prompt('Qual prefixo você quer usar para os nomes? (ex: XSS)', 'XSS') || 'XSS';
- prefix = prefix.toUpperCase().trim();
- const mode = confirm('Clique OK para renomear TODOS os aviões (sobrescreve existentes).\nClique Cancelar para renomear SÓ os não nomeados (continua a numeração).');
- const renameAll = mode;
- console.log(`🚀 Iniciando rename com prefixo: ${prefix}`);
- console.log(`Modo: ${renameAll ? 'Renomear TODOS' : 'Só não nomeados (continuar numeração)'}`);
- // Função para aguardar elemento
- function waitForElement(selector, timeout = 5000) {
- return new Promise((resolve, reject) => {
- if (document.querySelector(selector)) {
- return resolve(document.querySelector(selector));
- }
- const observer = new MutationObserver(() => {
- if (document.querySelector(selector)) {
- resolve(document.querySelector(selector));
- observer.disconnect();
- }
- });
- observer.observe(document.body, { childList: true, subtree: true });
- setTimeout(() => {
- observer.disconnect();
- reject(new Error(`Timeout waiting for ${selector}`));
- }, timeout);
- });
- }
- // Função para encontrar botão "Frota" (CORRIGIDA)
- function findFleetButton() {
- console.log('🔍 Procurando botão "Frota"...');
- // Buscar todos os botões
- const allButtons = document.querySelectorAll('button, [class*="btn"], .listBtns');
- console.log(`📊 Total de botões encontrados: ${allButtons.length}`);
- for (let btn of allButtons) {
- const text = (btn.textContent || btn.innerText || '').trim();
- const onclick = btn.getAttribute('onclick') || '';
- console.log(`🔍 Verificando botão: "${text.substring(0, 30)}..." | onclick: ${onclick.substring(0, 50)}...`);
- // Verificar texto
- if (text.toLowerCase().includes('frota') || text.includes('Fleet')) {
- console.log(`🎯 BOTÃO FROTA ENCONTRADO! Texto: "${text}"`);
- return btn;
- }
- // Verificar onclick
- if (onclick.includes('fleet.php') && !onclick.includes('parked')) {
- console.log(`🎯 BOTÃO FROTA ENCONTRADO! onclick: ${onclick}`);
- return btn;
- }
- }
- console.log('❌ Botão "Frota" não encontrado automaticamente.');
- return null;
- }
- // Verificar se já está na lista de frota
- console.log('🔍 Verificando se a lista de frota está carregada...');
- let fleetDetailList = document.querySelector('#fleetDetailList');
- if (!fleetDetailList) {
- console.log('📂 Lista não carregada. Tentando clicar no botão "Frota"...');
- const fleetButton = findFleetButton();
- if (fleetButton) {
- console.log('🎯 Clicando no botão "Frota"...');
- fleetButton.click();
- // Aguardar o #fleetDetailList aparecer
- try {
- await waitForElement('#fleetDetailList', 10000);
- console.log('✅ Lista de frota carregada com sucesso!');
- fleetDetailList = document.querySelector('#fleetDetailList');
- } catch (e) {
- console.error('❌ Erro ao aguardar lista: ', e);
- alert('❌ Não conseguiu carregar a lista de frota. Clique manualmente no botão "Frota" e execute o script novamente.');
- return;
- }
- } else {
- console.error('❌ Botão "Frota" não encontrado!');
- alert('❌ Botão "Frota" não encontrado. Execute o script de diagnóstico para encontrar o botão correto.');
- return;
- }
- } else {
- console.log('✅ Lista de frota já carregada.');
- }
- // Extrair aviões
- const rows = document.querySelectorAll('#fleetDetailList .row.border');
- console.log(`📊 Número de aviões encontrados: ${rows.length}`);
- if (rows.length === 0) {
- console.error('❌ Nenhum avião encontrado na lista!');
- console.log('💡 Execute o diagnóstico para ver a estrutura:');
- console.log('document.querySelectorAll("#fleetDetailList > div").length');
- alert('❌ Nenhum avião na lista. Compre aviões ou clique em "Frota" primeiro.');
- return;
- }
- const planes = [];
- let maxNumber = 0;
- rows.forEach((row, index) => {
- const a = row.querySelector('a[href="#"]');
- if (a) {
- const onclick = a.getAttribute('onclick');
- if (!onclick) return;
- const idMatch = onclick.match(/id=(\d+)/);
- if (!idMatch) return;
- const planeId = idMatch[1];
- const currentName = a.textContent.trim();
- // Verificar se já tem o formato correto
- const match = currentName.match(new RegExp(`^${prefix}-(\\d{4})$`));
- if (match) {
- const num = parseInt(match[1], 10);
- if (num > maxNumber) maxNumber = num;
- }
- planes.push({ planeId, currentName, row, a });
- console.log(`✈️ Avião ${index + 1}: ID=${planeId}, Nome="${currentName}"`);
- }
- });
- console.log(`🔍 Aviões válidos extraídos: ${planes.length}`);
- if (planes.length === 0) {
- console.error('❌ Nenhum avião válido encontrado!');
- return;
- }
- let nextNumber = renameAll ? 1 : (maxNumber + 1);
- console.log(`📊 Iniciando numeração a partir de: ${prefix}-${String(nextNumber).padStart(4, '0')}`);
- const toRename = renameAll
- ? planes
- : planes.filter(p => !p.currentName.match(new RegExp(`^${prefix}-\\d{4}$`)));
- console.log(`✈️ Aviões a renomear: ${toRename.length}`);
- if (toRename.length === 0) {
- console.log('✅ Nada para renomear! Todos já estão no formato correto.');
- return;
- }
- // Confirmar antes de começar
- const confirmStart = confirm(`🚀 Preparado para renomear ${toRename.length} aviões?\nPrefixo: ${prefix}\nIniciando de: ${prefix}-${String(nextNumber).padStart(4, '0')}`);
- if (!confirmStart) {
- console.log('❌ Rename cancelado pelo usuário.');
- return;
- }
- // Função de rename individual
- async function renameOne(plane, newName) {
- const timestamp = Date.now();
- const planeId = plane.planeId;
- // Tentar encontrar routeId
- let routeId = null;
- try {
- if (typeof flightData !== 'undefined' && Array.isArray(flightData)) {
- const flight = flightData.find(f => f.id == planeId);
- routeId = flight ? flight.routeId : null;
- }
- } catch (e) {
- console.warn('⚠️ flightData não disponível, pulando rename de rotas.');
- }
- console.log(`🔄 Renomeando ${planeId} de "${plane.currentName}" → "${newName}"`);
- // Rename do avião
- const regUrl = `https://www.airlinemanager.com/fleet_details.php?id=${planeId}&mode=reg®=${encodeURIComponent(newName)}&fbSig=false&_${timestamp}`;
- try {
- const response = await fetch(regUrl);
- if (!response.ok) throw new Error(`HTTP ${response.status}`);
- console.log(`✅ Registro renomeado: ${newName}`);
- } catch (e) {
- console.error(`❌ Erro no registro ${newName}: ${e.message}`);
- }
- // Rename da rota (se existir)
- if (routeId) {
- const routeUrl = `https://www.airlinemanager.com/fleet_details.php?id=${routeId}&mode=routeReg®=${encodeURIComponent(newName)}&fbSig=false&_${timestamp + 1}`;
- try {
- const response = await fetch(routeUrl);
- if (!response.ok) throw new Error(`HTTP ${response.status}`);
- console.log(`✅ Rota renomeada: ${newName}`);
- } catch (e) {
- console.error(`❌ Erro na rota ${newName}: ${e.message}`);
- }
- } else {
- console.log(`ℹ️ Sem rota para ${newName}`);
- }
- // Atualizar interface
- plane.a.textContent = newName;
- // Atualizar flightData se existir
- if (typeof flightData !== 'undefined' && Array.isArray(flightData)) {
- const flight = flightData.find(f => f.id == planeId);
- if (flight) flight.routeReg = newName;
- }
- // Delay de 1 segundo
- await new Promise(resolve => setTimeout(resolve, 1000));
- }
- // Executar renames
- console.log('🚀 === INICIANDO PROCESSO DE RENAME ===');
- for (let i = 0; i < toRename.length; i++) {
- const plane = toRename[i];
- const newName = `${prefix}-${String(nextNumber).padStart(4, '0')}`;
- nextNumber++;
- console.log(`📊 Progresso: ${i + 1}/${toRename.length} (${Math.round((i + 1) / toRename.length * 100)}%)`);
- console.log(` ${plane.currentName} → ${newName}`);
- await renameOne(plane, newName);
- }
- console.log(`🎉 === CONCLUÍDO! ===`);
- console.log(`✅ Sua frota agora usa "${prefix}-XXXX" de ${prefix}-0001 até ${prefix}-${String(nextNumber - 1).padStart(4, '0')}`);
- alert(`✅ Rename concluído! ${toRename.length} aviões renomeados com sucesso!`);
- })();
Advertisement
Add Comment
Please, Sign In to add comment