скрипт (function() { function createExportButton() { // Если кнопка уже есть, ничего не делаем if (document.getElementById('gc-universal-export-btn')) return; let btn = document.createElement('button'); btn.id = 'gc-universal-export-btn'; btn.innerHTML = '📊 СКАЧАТЬ АНАЛИТИКУ (CSV)'; // Стилизуем кнопку, чтобы она была поверх всех элементов в углу Object.assign(btn.style, { position: 'fixed', top: '70px', right: '20px', zIndex: '9999', padding: '10px 15px', backgroundColor: '#28a745', color: '#fff', border: 'none', borderRadius: '5px', cursor: 'pointer', fontWeight: 'bold', boxShadow: '0 4px 6px rgba(0,0,0,0.2)' }); btn.onclick = function() { let csv = "\ufeff"; let table = document.querySelector('table.table') || document.querySelector('table'); if (!table) { alert('Таблица с данными не найдена на этой странице.'); return; } let rows = table.querySelectorAll('tr'); rows.forEach((row) => { let rowData = []; let cols = row.querySelectorAll('td, th'); cols.forEach(col => { let text = col.innerText.replace(/\s+/g, ' ').replace(/"/g, '""').trim(); rowData.push('"' + text + '"'); }); csv += rowData.join(';') + '\n'; }); let blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' }); let link = document.createElement("a"); link.href = URL.createObjectURL(blob); link.download = "GC_Data_Export.csv"; link.click(); }; document.body.appendChild(btn); } // Запускаем проверку каждые 2 секунды, чтобы кнопка не исчезала setInterval(createExportButton, 2000); })(); скрипт