您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
go to the manga selection page and then just right click and then save. Happy fapping! (VPN required)
// ==UserScript== // @name Save NHentai images to Eagle // @namespace http://tampermonkey.net/ // @version 0.1 // @description go to the manga selection page and then just right click and then save. Happy fapping! (VPN required) // @author GreasyWeebs // @match *://*/* // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @run-at context-menu // @require https://code.jquery.com/jquery-3.5.1.min.js // @grant GM_xmlhttpRequest // ==/UserScript== (function() { 'use strict'; const EAGLE_SERVER_URL = "http://localhost:41595"; const EAGLE_IMPORT_API_URL = `${EAGLE_SERVER_URL}/api/item/addFromURL`; const EAGLE_CREATE_FOLDER_API_URL = `${EAGLE_SERVER_URL}/api/folder/create`; const SELECTOR_IMAGE = ".gallery a"; const SELECTOR_HIGHRES = ".thumb-container noscript img"; var imgElements = Array.from(document.querySelectorAll(SELECTOR_IMAGE)); var galleryElements = Array.from(document.querySelectorAll('.gallery')); var galleryCount = galleryElements.length; var count = 0; var createFolder = function(folderName, callback) { GM_xmlhttpRequest({ url: EAGLE_CREATE_FOLDER_API_URL, method: "POST", data: JSON.stringify({ folderName: folderName }), onload: function(response) { try { var result = JSON.parse(response.response); if (result.status === "success" && result.data && result.data.id) { callback(undefined, result.data); } else { callback(true); } } catch (err) { callback(true); } } }); }; function addImageToEagle(data) { GM_xmlhttpRequest({ url: EAGLE_IMPORT_API_URL, method: "POST", data: JSON.stringify(data), onload: function (response) { } }); } function saveImages(folder, title, imgCount, hiresImgID, tagsData, imgLinkSource){ for(var i=0;i<imgCount;i++){ var saveData = { "url": "https://i.nhentai.net/galleries/"+hiresImgID+"/"+(i+1)+".jpg", "name": 'page '+(i+1), "website": imgLinkSource, "folderId": folder.id, "tags": tagsData, "headers": { "referer": "nhentai.net" } }; addImageToEagle(saveData); } } var fetchImg = setInterval(function(){ $.get(imgElements[count].href, function (html) { var parser = new DOMParser(); var doc = parser.parseFromString(html, "text/html"); var preloadData = Array.from(doc.querySelectorAll('.thumb-container')); var imgCount = preloadData.length; var titleRaw = Array.from(doc.querySelectorAll('.title')); var title = titleRaw[0].querySelector('.title .before').innerHTML+" "+titleRaw[0].querySelector('.title .pretty').innerHTML+" "+titleRaw[0].querySelector('.title .after').innerHTML; var hiresImg = Array.from(doc.querySelectorAll(SELECTOR_HIGHRES)); var hiresImgSplit1 = hiresImg[0].src.split("https://t.nhentai.net/galleries/"); var hiresImgSplit2 = hiresImgSplit1[1].split("/1t"); var hiresImgID = hiresImgSplit2[0]; var tags = Array.from(doc.querySelectorAll('.tag-container .tags a .name')); var imgLinkSource = imgElements[count].href; var tagsData = []; for(var i=0;i<tags.length-1;i++){ tagsData[i] = tags[i].innerHTML; } createFolder(title, function (err, folder) { if (folder) { saveImages(folder, title, imgCount, hiresImgID, tagsData, imgLinkSource); } else { alert("folder is not exist"); } }); }); count++; if(count==galleryCount){ clearInterval(fetchImg); } }, 1000); })();