// ==UserScript==
// @name Copy-Text
// @version 1.0
// @description Merge and copy
// @author Ep Tien Sinh
// @match *://69shuba.cx/*/*
// @match *://www.qidian.com/chapter/*
// @match *://fanqienovel.com/reader/*
// @match *://www.ixdzs8.tw/*
// @match *://www.qimao.com/*/*
// @match *://www.keleshuba.net/*
// @match *://www.17k.com/*
// @match *://www.piaotia.com/*/*/*/*
// @grant GM_setClipboard
// @grant GM_download
// @namespace https://greasyfork.org/users/1402485
// ==/UserScript==
(function() {
'use strict';
// Cấu hình cho từng trang bằng cách sử dụng một đối tượng
var pageConfigs = [
{
urlContains: '69shuba.cx/*',
headerSelector: 'body > div.container > div.mybox > div.txtnav > h1',
contentSelector: 'body > div.container > div.mybox > div.txtnav',
trashSelectors: [
'#txtright',
'div.contentadv',
'div.bottom-ad',
'div.txtinfo.hide720'
// Thêm các selector 'rác' khác tại đây
]
},
{
urlContains: 'www.qidian.com',
headerSelector: '#reader-content > div.min-h-100vh.relative.z-1.bg-inherit > div > div.relative > div > h1',
contentSelector: 'div.enable-review',
trashSelectors: [
'#reader-content > div > div > div.relative > div > div.text-s-gray-500.mt-4px.text-bo4.flex.items-center.flex-wrap',
'span.review'
]
},
{
urlContains: 'fanqienovel.com',
headerSelector: 'div.muye-reader-box-header > h1',
contentSelector: 'div.muye-reader-content'
},
{
urlContains: 'ixdzs8.tw',
headerSelector: '#page > article > h3',
contentSelector: '#page > article > section'
},
{
urlContains: 'www.qimao.com',
headerSelector: '#__layout > div > div.wrapper.reader.reader-layout-theme > div.main > div > div > div > div.chapter-detail-wrap.reader-box > div.chapter-detail-wrap-info > h2',
contentSelector: '#__layout > div > div.wrapper.reader.reader-layout-theme > div.main > div > div > div > div.chapter-detail-wrap.reader-box > div.chapter-detail-wrap-content > div.show-part > div'
},
{
urlContains: 'www.keleshuba.net',
headerSelector: '#nr_title',
contentSelector: '#nr1',
trashSelectors1: [
'div[data-ad-slot="1016693305"]'
]
},
{
urlContains: 'www.17k.com',
headerSelector: '#nr_title',
contentSelector: '#nr1',
trashSelectors1: [
'div[data-ad-slot="1016693305"]'
]
},
{
urlContains: 'www.piaotia.com',
headerSelector: '#content > h1',
contentSelector: '#content',
trashSelectors1: [
'#content > div',
'#content > table'
]
},
// Thêm cấu hình cho các trang khác tương tự
];
function mergeAndCopy(config) {
var headerElement = document.querySelector(config.headerSelector);
var contentElement = document.querySelector(config.contentSelector);
var trashSelectors = config.trashSelectors || [];
trashSelectors.forEach(function(selector) {
var trashElements = document.querySelectorAll(selector);
trashElements.forEach(function(element) {
element.remove();
});
});
if (headerElement && contentElement) {
var headerContent = headerElement.textContent.trim().replace(/\s{2,}/g, '\n');
var contentHtml = contentElement.innerHTML;
var contentText = contentHtml.replace(/ /g, ' ')
.replace('(adsbygoogle = window.adsbygoogle || []).push({});', '')
.replace(/<br\s*[\/]?>/gi, '\n')
.replace(/<\/p>/gi, '\n')
.replace(/<p[^>]*>/gi, '')
.replace(/<[^>]+>/g, '');
contentText = contentText.trim().replace(/\s{2,}/g, '\n').replace(/\n{3,}/g, '\n\n');
var lines = contentText.split('\n');
var headerPattern = headerContent.replace(/第\d+章/, '第\\d+章');
var headerRegex = new RegExp(headerPattern);
if (lines.length > 0 && headerRegex.test(lines[0].trim())) {
lines[0] = lines[0].replace(headerRegex, '').trim();
}
contentText = lines.join('\n').trim();
if (window.location.href.includes('www.qimao.com')) {
var headerLines = headerContent.split('\n');
if (headerLines.length > 1) {
headerContent = headerLines.join(' ').trim(); // Gộp hai dòng tiêu đề lại
}
}
var mergedContent = headerContent + '\n\n' + contentText + '\n\n';
var mergedLines = mergedContent.split('\n');
if (window.location.href.includes('www.piaotia.com')) {
if (mergedLines.length > 10) {
mergedContent = mergedLines.slice(10).join('\n');
}
}
else if (window.location.href.includes('69shuba.cx')) {
var wrongChapter = /^\d+\.\s*(第\d+章)/;
var correctChapter = /^第\d+章/;
var line = mergedLines[0].trim();
if (wrongChapter.test(line)) {
mergedLines[0] = line.replace(wrongChapter, '$1').trim();
}
if (mergedLines.length > 2) {
var line3 = mergedLines[2].trim();
if (correctChapter.test(line3)) {
mergedLines.splice(2, 1);
}
}
mergedContent = mergedLines.join('\n');
}
return mergedContent;
}
return '';
}
function navigate(direction) {
var buttonTexts = direction === 'next' ? ['下一章', '下一页'] : ['上一章', '上一页'];
var button = null;
buttonTexts.some(text => {
button = Array.from(document.querySelectorAll('a, button, span')).find(el => el.textContent.trim() === text);
return button !== undefined; // Dừng vòng lặp nếu tìm thấy
});
if (button) {
if (button.tagName.toLowerCase() === 'a') {
window.location.href = button.href;
} else {
button.click();
}
}
}
function applyPageConfig() {
var currentUrl = window.location.href;
var config = pageConfigs.find(function(config) {
return currentUrl.includes(config.urlContains);
});
if (config) {
return mergeAndCopy(config);
}
return '';
}
function getCurrentPageConfig() {
var currentUrl = window.location.href;
return pageConfigs.find(function(config) {
return currentUrl.includes(config.urlContains);
});
}
function checkNavigationButtons() {
var nextTexts = ['下一章', '下一页'];
var prevTexts = ['上一章', '上一页'];
var nextButton = null;
var backButton = null;
nextTexts.some(text => {
nextButton = Array.from(document.querySelectorAll('a, button, span')).find(el => el.textContent.trim() === text);
return nextButton !== undefined;
});
prevTexts.some(text => {
backButton = Array.from(document.querySelectorAll('a, button, span')).find(el => el.textContent.trim() === text);
return backButton !== undefined;
});
if (nextButton) {
nextButton.style.display = 'block';
}
if (backButton) {
backButton.style.display = 'block';
}
}
function checkNavigationButtonsOnLoad() {
checkNavigationButtons();
}
var autoClickInterval;
var isCopying = false;
var copiedChapters = [];
function startAutoClick() {
autoClickInterval = setInterval(function() {
if (!isCopying) {
isCopying = true;
var currentPageConfig = getCurrentPageConfig();
if (currentPageConfig) {
var mergedContent = applyPageConfig();
if (!copiedChapters.includes(mergedContent)) {
appendToClipboard(mergedContent);
copiedChapters.push(mergedContent);
}
}
setTimeout(function() {
var nextButtonExists = checkNextButtonExists();
if (!nextButtonExists) {
// Dừng auto-click nếu không còn chương tiếp theo
stopAutoClick();
return;
}
navigate('next');
setTimeout(function() {
isCopying = false;
}, 1000); // Tăng thêm thời gian chờ sau khi chuyển chương để đảm bảo quá trình copy hoàn thành
}, 800); // Chuyển chương sau 0.8 giây
}
}, 1500); // Điều chỉnh thời gian chờ để tránh copy lặp lại (tăng lên 1.5 giây)
autoClickButton.textContent = 'Stop Auto';
localStorage.setItem('autoClickRunning', 'true');
}
function checkNextButtonExists() {
var buttonTexts = ['下一章', '下一页']; // Các văn bản cho nút "Next"
var nextButton = null;
buttonTexts.some(text => {
nextButton = Array.from(document.querySelectorAll('a, button, span')).find(el => el.textContent.trim() === text);
return nextButton !== undefined;
});
return nextButton !== undefined;
}
function clearClipboardAndStartAutoClick() {
navigator.clipboard.writeText('').then(function() {
startAutoClick();
}, function(err) {
});
}
function appendToClipboard(newContent) {
navigator.clipboard.readText().then(function(currentContent) {
const combinedContent = currentContent + newContent;
navigator.clipboard.writeText(combinedContent).then(function() {
}, function(err) {
});
}, function(err) {
});
}
function stopAutoClick() {
clearInterval(autoClickInterval);
autoClickInterval = null;
autoClickButton.textContent = 'Auto Click';
localStorage.removeItem('autoClickRunning');
var headerText = 'clipboard';
navigator.clipboard.readText().then(clipboardContent => {
if (clipboardContent) {
var blob = new Blob([clipboardContent], { type: 'text/plain' });
let downloadLink = window.URL.createObjectURL(blob);
let downloadArgs = {
url: downloadLink,
name: `${headerText}.txt`
};
GM_download(downloadArgs);
}
}).catch(err => {
});
}
var copyNextButton = createButton('Copy & Next', '50px', '490px', function() {
var mergedContent = applyPageConfig(); // Lấy nội dung hợp nhất
GM_setClipboard(mergedContent);
setTimeout(function() {
navigate('next');
}, 1000);
});
document.body.appendChild(copyNextButton);
var autoClickButton = createButton('Auto Click', '50px', '370px', function() {
if (!autoClickInterval) {
clearClipboardAndStartAutoClick();
} else {
stopAutoClick();
}
});
document.body.appendChild(autoClickButton);
var nextButton = createButton('Next Chương', '10px', '490px', function() {
navigate('next');
checkNavigationButtons();
});
document.body.appendChild(nextButton);
var backButton = createButton('Back Chương', '10px', '370px', function() {
navigate('back');
checkNavigationButtons();
});
document.body.appendChild(backButton);
function createButton(text, bottom, left, clickHandler) {
var button = document.createElement('button');
button.textContent = text;
button.style.position = 'fixed';
button.style.bottom = bottom;
button.style.left = left;
button.style.zIndex = '9999';
button.style.width = '110px';
button.style.height = '35px';
button.style.backgroundColor = text.includes('Next') ? 'green' : 'blue';
button.style.color = 'white';
button.addEventListener('mousedown', function() {
button.style.backgroundColor = 'yellow';
button.style.color = 'black';
});
button.addEventListener('mouseup', function() {
button.style.backgroundColor = text.includes('Next') ? 'green' : 'blue';
button.style.color = 'white';
});
button.addEventListener('click', clickHandler);
return button;
}
if (localStorage.getItem('autoClickRunning') === 'true') {
startAutoClick();
}
function main() {
checkNavigationButtonsOnLoad();
applyPageConfig();
}
document.addEventListener('DOMContentLoaded', main);
})();