您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Tự động điền form đăng chương trên tangthuvien.net với tính năng nâng cao
当前为
// ==UserScript== // @name TTV Auto Upload // @namespace http://tampermonkey.net/ // @version 0.2 // @description Tự động điền form đăng chương trên tangthuvien.net với tính năng nâng cao // @author Your name // @match https://tangthuvien.net/dang-chuong/story/* // @grant none // ==/UserScript== (function() { 'use strict'; // Thêm CSS cho thông báo const style = document.createElement('style'); style.textContent = ` .ttv-notification { position: fixed; top: 20px; right: 20px; padding: 10px 20px; background: #4CAF50; color: white; border-radius: 4px; z-index: 9999; display: none; } .ttv-error { background: #f44336; } .ttv-button-group { margin-top: 10px; display: flex; gap: 10px; } `; document.head.appendChild(style); // Tạo div thông báo const notification = document.createElement('div'); notification.className = 'ttv-notification'; document.body.appendChild(notification); // Hiển thị thông báo function showNotification(message, isError = false) { notification.textContent = message; notification.className = 'ttv-notification' + (isError ? ' ttv-error' : ''); notification.style.display = 'block'; setTimeout(() => { notification.style.display = 'none'; }, 3000); } // Thêm các nút điều khiển function addControlButtons() { const actionDiv = document.getElementById('action-btns'); if (!actionDiv) { showNotification('Không tìm thấy vị trí để thêm nút!', true); return; } const buttonGroup = document.createElement('div'); buttonGroup.className = 'ttv-button-group col-sm-8 col-sm-offset-2'; // Nút tự động điền const autoFillBtn = document.createElement('button'); autoFillBtn.type = 'button'; autoFillBtn.className = 'btn btn-primary'; autoFillBtn.innerHTML = '<span>Tự động điền</span>'; autoFillBtn.onclick = autoFillForm; // Nút lưu cấu hình const saveConfigBtn = document.createElement('button'); saveConfigBtn.type = 'button'; saveConfigBtn.className = 'btn btn-success'; saveConfigBtn.innerHTML = '<span>Lưu cấu hình</span>'; saveConfigBtn.onclick = saveChapterConfig; // Nút tải cấu hình const loadConfigBtn = document.createElement('button'); loadConfigBtn.type = 'button'; loadConfigBtn.className = 'btn btn-info'; loadConfigBtn.innerHTML = '<span>Tải cấu hình</span>'; loadConfigBtn.onclick = loadChapterConfig; buttonGroup.appendChild(autoFillBtn); buttonGroup.appendChild(saveConfigBtn); buttonGroup.appendChild(loadConfigBtn); actionDiv.appendChild(buttonGroup); } // Tự động điền form function autoFillForm() { try { // Kiểm tra CSRF token const tokenInput = document.querySelector('input[name="_token"]'); if (!tokenInput) { showNotification('Không tìm thấy token!', true); return; } // Lấy thông tin chương hiện tại const chap_stt = document.querySelector('.chap_stt1')?.value; const chap_serial = document.querySelector('.chap_serial')?.value; const chap_vol = document.querySelector('.chap_vol')?.value; const chap_vol_name = document.querySelector('.chap_vol_name')?.value; if (!chap_stt || !chap_serial) { showNotification('Không tìm thấy thông tin chương!', true); return; } // Điền các trường const fields = { 'chap_stt[1]': chap_stt, 'chap_number[1]': chap_serial, 'vol[1]': chap_vol || '1', 'vol_name[1]': chap_vol_name || '', 'chap_name[1]': `Chương ${chap_serial}` }; for (const [name, value] of Object.entries(fields)) { const input = document.querySelector(`input[name="${name}"]`); if (input) { input.value = value; } } // Focus vào ô nội dung const contentInput = document.querySelector('textarea[name="introduce[1]"]'); if (contentInput) { contentInput.focus(); showNotification('Đã điền form thành công!'); } else { showNotification('Không tìm thấy ô nhập nội dung!', true); } } catch (error) { console.error('Lỗi khi tự động điền form:', error); showNotification('Có lỗi xảy ra khi điền form!', true); } } // Lưu cấu hình chương function saveChapterConfig() { try { const config = { chap_stt: document.querySelector('.chap_stt1')?.value, chap_serial: document.querySelector('.chap_serial')?.value, chap_vol: document.querySelector('.chap_vol')?.value, chap_vol_name: document.querySelector('.chap_vol_name')?.value }; localStorage.setItem('ttv_chapter_config', JSON.stringify(config)); showNotification('Đã lưu cấu hình thành công!'); } catch (error) { console.error('Lỗi khi lưu cấu hình:', error); showNotification('Có lỗi xảy ra khi lưu cấu hình!', true); } } // Tải cấu hình chương function loadChapterConfig() { try { const savedConfig = localStorage.getItem('ttv_chapter_config'); if (!savedConfig) { showNotification('Không tìm thấy cấu hình đã lưu!', true); return; } const config = JSON.parse(savedConfig); // Cập nhật các trường const fields = { '.chap_stt1': config.chap_stt, '.chap_serial': config.chap_serial, '.chap_vol': config.chap_vol, '.chap_vol_name': config.chap_vol_name }; for (const [selector, value] of Object.entries(fields)) { const input = document.querySelector(selector); if (input && value) { input.value = value; } } showNotification('Đã tải cấu hình thành công!'); } catch (error) { console.error('Lỗi khi tải cấu hình:', error); showNotification('Có lỗi xảy ra khi tải cấu hình!', true); } } // Thêm các nút điều khiển khi trang đã load window.addEventListener('load', function() { addControlButtons(); }); })();