Auto-load NHentai images

Auto-load NHentai images1

// ==UserScript==
// @name         Auto-load NHentai images
// @namespace    Violentmonkey Scripts
// @version      0.3
// @description  Auto-load NHentai images1
// @author       Kenseori
// @license      MIT
// @match        https://nhentai.xxx/g/*/*
// @grant        GM_xmlhttpRequest
// ==/UserScript==

(function() {
    'use strict';

    let totalPages = 0;

    // Функция для получения общего числа страниц
    const getTotalPages = () => {
        const pagesButton = document.querySelector('.reader_nav .pages_btn');
        if (pagesButton) {
            const pageCountText = pagesButton.querySelector('.tp')?.textContent;
            if (pageCountText) {
                totalPages = parseInt(pageCountText, 10);
                console.log('Total Pages:', totalPages);
            }
        }
        if (!totalPages) {
            console.error("Не удалось найти количество страниц.");
        }
    };

    // Функция для загрузки следующей страницы
    const loadNextPage = (currentUrl) => {
        const match = currentUrl.match(/\/g\/(\d+)\/(\d+)\/$/);
        if (!match) return console.error("Не удалось извлечь данные из URL:", currentUrl);

        const [_, galleryId, currentPageNumber] = match;
        const nextPageNumber = parseInt(currentPageNumber, 10) + 1;

        if (nextPageNumber <= totalPages) {
            const nextPageUrl = `https://nhentai.xxx/g/${galleryId}/${nextPageNumber}/`;
            GM_xmlhttpRequest({
                method: 'GET',
                url: nextPageUrl,
                onload: function(response) {
                    const doc = new DOMParser().parseFromString(response.responseText, 'text/html');
                    const newImage = doc.querySelector('img[id="fimg"]');
                    if (newImage) {
                        const imageSource = newImage.hasAttribute('data-src') ? newImage.getAttribute('data-src') : newImage.src;
                        const imgContainer = document.querySelector('.fw_img');
                        if (imgContainer) {
                            const newImgElement = document.createElement('img');
                            newImgElement.src = imageSource;
                            newImgElement.className = 'lazy entered loaded';
                            imgContainer.appendChild(newImgElement);
                            console.log(`Загружена страница ${nextPageNumber}`);
                            loadNextPage(nextPageUrl); // рекурсивный вызов для следующей страницы
                        } else {
                            console.error("Не удалось найти контейнер для изображения.");
                        }
                    } else {
                        console.error("Изображение не найдено на следующей странице:", nextPageUrl);
                    }
                },
                onerror: () => {
                    console.error("Ошибка при загрузке страницы:", nextPageUrl);
                }
            });
        } else {
            console.log('Загрузили все страницы.');
        }
    };

    // Запуск автоматической загрузки
    const startAutoLoad = () => {
        getTotalPages();
        if (totalPages > 0) {
            loadNextPage(window.location.href);
        } else {
            console.error('Не удалось получить количество страниц.');
        }
    };

    startAutoLoad();
})();