PC Chrome 123.0.6312.106 + Tampermonkey 5.1.0 Edge 123.0.2420.65 + Tampermonkey 5.0.1 Cent Browser 5.1.1130.26 + Tampermonkey 5.1.0 FireFox 124.0.2 + Tampermonkey 5.1.0 Android Kiwi Browser 124.0.6327.1 + Tampermonkey 5.1.0 Firefox for Android 124.2.0 + Tampermonkey 5.1.0 Waterfox for Android 1.0.6 + Tampermonkey 5.1.0
如果所在區域,ISP,或是不可抗力的因素而無法正常連接cdn.jsdelivr.net的依賴庫時
請自行修改腳本將所有cdn.jsdelivr.net替換成cdn.bootcdn.net
cdn.jsdelivr.net // @require https://update.greasyfork.org/scripts/473358/1237031/JSZip.js // @require https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js // @require https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0.31/dist/fancybox/fancybox.umd.js // @resource JqueryJS https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min // @resource FancyboxV5JS https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0.31/dist/fancybox/fancybox.umd.js // @resource FancyboxV5Css https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0.31/dist/fancybox/fancybox.css // @resource FancyboxV3JS https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js // @resource FancyboxV3Css https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css // @resource ViewerJs https://cdn.jsdelivr.net/npm/viewerjs@1.11.6/dist/viewer.min.js // @resource ViewerJsCss https://cdn.jsdelivr.net/npm/viewerjs@1.11.6/dist/viewer.min.css
cdn.bootcdn.net // @require https://update.greasyfork.org/scripts/473358/1237031/JSZip.js // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js // @require https://cdn.bootcdn.net/ajax/libs/fancyapps-ui/5.0.22/fancybox/fancybox.umd.js // @resource JqueryJS https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js // @resource FancyboxV5JS https://cdn.bootcdn.net/ajax/libs/fancyapps-ui/5.0.22/fancybox/fancybox.umd.js // @resource FancyboxV5Css https://cdn.bootcdn.net/ajax/libs/fancyapps-ui/5.0.22/fancybox/fancybox.css // @resource FancyboxV3JS https://cdn.bootcdn.net/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.js // @resource FancyboxV3Css https://cdn.bootcdn.net/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.css // @resource ViewerJs https://cdn.bootcdn.net/ajax/libs/viewerjs/1.11.5/viewer.min.js // @resource ViewerJsCss https://cdn.bootcdn.net/ajax/libs/viewerjs/1.11.5/viewer.min.css
2023/11/06
腳本1.6.0+版本使用Fancybox5.0.24後,暴力猴Violentmonkey會報錯。
如果用戶堅持使用暴力猴Violentmonkey,腳本1.6.3+的版本只需用戶自己修改
// @require https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0.31/dist/fancybox/fancybox.umd.js改成
// @require https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js
應該就能正常使用了,相當於用戶自己降低Fancybox的版本,Fancybox的css會自動注入3.5.7版。
2023/11/03
1.6.0開始Fancybox從3.5.7升級至5.0.24,部分網站依然調用3.5.7,網站如果有自帶LIGHTBOX之類的插件,則不調用腳本的Fancybox避免各種衝突,如有遇到FancyboxV5版圖片沒有置中錯位偏右請反饋。
2023/10/24
1.5.0開始改動太多,使用低於1.5.0的版本升級後,如遇到任何問題請先手動重置設定,如左下圖示不見了,快捷鍵沒有反應,切換顯示按鈕沒反應等等...
如果嚴重到連選項設定都叫不出來,按F12 > 主控台(Console) > 下方輸入框 > 輸入下面這行代碼,然後Enter,重新載入頁面。
localStorage.removeItem("FullPictureLoadOptions");
紳士漫畫wnacg,由於新增的Fancybox功能的緣故,新的元素結構導致可能會被擋廣告擴充套件的規則隱藏掉圖片,下拉閱讀頁需要加白名單網址(信任名單),腳本已隱藏廣告元素,或在該網站關閉Fancybox功能。
https://*wnacg.com/photos-index-aid-*.html https://*wnacg.com/photos-slide-aid-*.html https://*wnacg.com/photos-slist-aid-*.html
Fancybox功能在少部份網站上無效或與網站自身的LIGHTBOX插件衝突或顯示有問題,有列了是不使用Fancybox的網站,如下。
XLUST.ORG、ACGN小鎮、最新韩漫网M、拷貝漫畫M、野蛮漫画、次元漫画、漫神
寫這個腳本的緣由是,想讓下載、複製鏈結不用做展開圖庫挑選圖片的動作,能自己決定要儲存的壓縮檔和資料夾名稱,網站沒有限制連接數的話能做到高速聚集所有圖片,還能添加一些我想要的輔助功能。
聚圖!反對將一話一集一章一篇一部拆成好幾頁,一頁一張圖真XXX的有病,整頁用Lazy loading的話還能接受,透過選擇器圈選圖片或者自己寫函式,能聚集分頁的所有圖片到當前頁面裡,也能進行下載壓縮打包,如有NEXT元素能做到自動化下載,支援自定義規則方便重複使用,後續擴充規則更容易。
用戶寫的規則請自行另外備份,規則只會寫死在腳本裡不會線上規則化,腳本更新就會覆蓋規則。
如有需要支持的站點可反饋,有空的話會嘗試幫寫規則加進腳本內置的規則庫裡,能力有限不保証一定寫的出來。
當修改了腳本UI選項設定或快捷鍵[ Ctrl + . ]或腳本內的站點規則啟用了自動下載時,站點規則insertImg的自動插入圖片將無效,瀏覽器的下載設定需關閉下載前詢問儲存位置和設定好預設的下載路徑,全自動需要有NEXT做搭配,每個站點第一次啟用時需等待連續下載2~3次後,觸發瀏覽器詢問是否同意允許下載多個檔案,需同意後後續才能成功下載,並且讓分頁保持在前景運行不然壓縮進度會停住,可以開一個獨立視窗一個分頁用作下載用,最好的方式是拉兩個視窗一個佔1/3畫面掛下載一個佔3/2畫面瀏覽。「 點擊展開查看 」
[{ name: "規則名稱", enable: 0, //填0禁用此規則 icon: 0, //填0不顯示左下圖示 key: 0, //填0不綁定快捷鍵 reg: /www\.xxxxx\.com/, //正則表達式匹配網址 reg: [ //匹配正則表達式數組 /RegExp/, /RegExp/ ], reg: () => { //函式寫法返回布林值boolean if (/^https?:\/\/www\.everiaclub\.com\/.+/.test(siteUrl)) { if(!siteUrl.includes(".html")) { return true; } } return false; }, delay: 300, //延遲載入規則 include: "元素選擇器", //網頁必須包含的元素 include: ["A元素選擇器", "B元素選擇器", "C元素選擇器", "D元素選擇器"], //網頁必須包含數組裡的所有元素 exclude: "元素", //網頁要排除的元素 exclude: ["A元素選擇器", "B元素選擇器", "C元素選擇器", "D元素選擇器"], //網頁要排除數組裡其中的元素 init: "code", //載入頁面後要優先執行的代碼 init: () => { code; }, init: async () => await fun.waitEle("元素選擇器"), //等待直至元素出現 init: async () => await fun.waitVar("屬性名"), //等待直至window物件的屬性出現 imgs: "#TheImg", //CSS選擇器 imgs: "//img[@id="TheImg"]", //XPath選擇器 //IMG、DIV、A,SPAN,4種元素會先判斷有沒有圖片網址放在dataset屬性,如果沒有IMG取src屬性,A取href屬性。 imgs: () => { //也可自己創建Array,有時大圖是在A元素上需要透過xhr獲取或放在script或變量或透過api取得的json。 code; return Array; }, repeat: 1, //重複取得圖片元素,用於SPA網頁 scrollEle: ["元素", time],//[自動捲動元素, 捲動的間隔], 綁定快捷鍵數字鍵6 scrollEle: async () => { …code; }, button: [4, "24%", 1],//[無作用, "寬度%", 在按鈕之前添加多少空行]插入圖片也添加功能按鈕 insertImg: ["元素", 1, time], //[清空此元素內容插入圖片, 0(手動)1(自動)2(自動Lazy loading模式)3(手動Lazy loading模式), 自動延遲時間(預設0)]。 insertImg: [ ["元素", (插入在此元素) 0(裡面)1(之前) 2(之後), "要移除的元素"], 0(手動) 1(自動) 2(自動Lazy loading模式) 3(手動Lazy loading模式), 自動延遲時間(預設0) ], insertImgAF: () => { //插入圖片後要執行的代碼 code; }, go: 1, //insertImg配套選項,圖片插入在頁面偏下位置時,捲動至第一張大圖的位置。 customTitle: "return text;", //自定義JS代碼生成壓縮檔和資料夾名稱,預設是使用當前網頁標題。 customTitle: () => { code; return text; }, observerTitle: true, //觀察元素變化重新取得標題字串,用於SPA網頁 autoDownload: [1, time], //1載入頁面後立即開始下載,與next搭配可以實現全自動下載,time延遲幾秒後點擊下一頁(預設5)。 next: "//a[text()='下一章']", //設定下一頁元素綁定右方向鍵點擊下一頁。 next: () => { code; return link; }, observerURL: true, //觀察URL變化重新取得標題字串和nextLink,用於SPA網頁 observerNext: true, //觀察元素變化重新取得nextLink observerNext: ".read_nav", //指定觀察元素的子元素變化重新取得nextLink prev: "//a[text()='上一章']", //設定上一頁元素綁定左方向鍵點擊上一頁,填1則使用history.back();。 css: "css", //插入自訂樣式,基本上就是用來隱藏廣告用的。 autoClick: "元素", //載入頁面後點擊一次此元素,能簡單做到自動簽到、展開目錄、Show All autoClick: ["元素", 1000], //元素,延遲毫秒時間(預設1000) observerClick: "元素", //使用Intersection Observer API,元素進入可視範圍內才點擊 loadMore: "元素", //監聽scroll事件,滾至頁面底部時點擊元素,能簡單做到自動載入更多 openInNewTab: ".manga-cover>a:not([target=_blank])", //指定的A元素在新分頁開啟 topButton: true, //添加返回頂部按鈕 threading: 1, //有些網站限制連接數,下載連接數太大容易出錯,適當降低連接數。 fetch: 1, //使用Fetch API下載圖片,需要網站有支援CORS,如小黃書 referer: "src", //下載圖片時傳遞的參照頁,預設是使用當前網址,"src"參照頁為圖片網址,也能自訂如"https://www.4khd.com/"或空"" infiniteScroll: true, //漫畫類標記有無限滾動模式 category: "comic" //類別nsfw1、nsfw2、hcomic、comic、lazyload、ad、none }, { name: "規則2", enable: 0, icon: 0, key: 0, reg: /www\.xxxxx\.com/, reg: [ //, // ], reg: () => { if (code) { return true; } return false; }, delay: 300, include: "", include: [""], exclude: "", exclude: [""], init: "code", init: () => { code }, imgs: "", imgs: () => { code }, repeat: 1, scrollEle: ["", 500], scrollEle: async () => { …code; }, button: [4, "24%", 1], insertImg: ["", 0, time], insertImg: [ ["", 1, ""], 2, time ], insertImgAF: () => { code }, go: 1, customTitle: "code", customTitle: () => { code }, observerTitle: true, autoDownload: [1, time], next: "", next: () => { code }, observerURL: true, observerNext: true, prev: "", css: "", autoClick: "", autoClick: ["", time], observerClick: "", loadMore: "", openInNewTab: "", topButton: true, threading: 1, fetch: 1, referer: "src", category: "" }, { name: "規則3", … }]
// 網站自帶燈箱功能,不注入FancyboxCSS樣式 fancybox: { v: 3, css: false }, // 不使用燈箱功能 fancybox: { blacklist: 1 }, // 頁面注入代碼,使用Fancybox3.5.7 fancybox: { v: 3, insertLibrarys: 1 }, // 頁面注入代碼,使用Fancybox5 fancybox: { v: 5, insertLibrarys: 1 },
「 點擊展開查看 」
簡易實現自動翻頁功能,圖片全載的實驗性輔助功能,需要動態加載的大多都翻不了。
點擊標題分隔條和雙擊頁面空白處,暫停或啟用自動翻頁。
需要更高級的自動翻頁功能請使用東方永頁機。
變量doc初始為當前頁的document,當獲取下一頁後為下一頁的document物件 舉例選取元素 doc.querySelector(selector) [...doc.querySelectorAll(selector)] fun.ge(selector, doc) [...fun.gae(selector, doc)]
{ name: "哈哈漫画 www.hahacomic.com 分類自動翻頁", enable: 1, reg: /^https:\/\/www\.hahacomic\.com\/manhua\/list\.html/, autoPager: { ele: ".mdui-col-lg-2", observer: ".mdui-col-lg-2", next: (doc) => { let next = doc.querySelector("span.current+a"); if (next) { let num = next.getAttribute("href").match(/\d+/)[0]; return location.href.replace(/\?page=\d+/, "") + "?page=" + num; } else { return null; } }, re: ".pages", history: 1 }, category: "autoPager" }, { name: "規則範例", enable: 1, reg: /^https:\/\/.+/, autoPager: { mode: 0, //0(預設可省略)靜態翻頁使用Fetch API加載下一頁,1動態翻頁使用iframe框架加載下一頁。 waitEle: "selector", //mode為1時等待直到指定的元素出現,不需要則省略,預設使用主體元素選擇器。 loadTime: 200, //mode為1時給iframe框架讀取的時間,預設200可省略。 frameCode: ` //mode為1時要注入到iframe裡運行的代碼,由於是字串特殊字元需要轉譯,例如\要表達為\\ //會改變腳本的frameWindow變量從當前window變為iframe的window //可參照8Comic無限動漫自動翻頁規則的用法 `, ele: "selector", //下一頁主體元素選擇器 ele: (dom) => { //2種寫法 //1.創建元素和插入元素皆由此函式完成 //2.創建元素陣列返回元素陣列,搭配pos決定元素插入位置 code; return [...elements]; }, pos: ["selector", 0], //[插入下一頁主體元素的基準元素, 0裡面1之前2之後],預設為主體元素最後一個之後,可省略。 next: "selector", //下一頁A元素選擇器 next: (dom) => { code; return url; }, getData: () => { //請求完下一頁後要優先執行的代碼 //用於改變globalImgArray、tempNextLink、customTitle,方便後續調用 //可參照拷貝漫畫M自動翻頁規則的用法 code; return new Promise(code); }, re: "selector", //替換元素,下一頁的元素替換到當前頁面的相同的元素,如標題、頁碼條,不需要則省略。 observer: "selector", //用來觸發翻下一頁的元素,有多個元素時取最後一個元素,觸發時機為當元素進入可視範圍時,不使用則省略。 stop: (dom) => { //根據判斷結果返回布林值boolean停止翻頁。 code; if (code) { return true } return false }, showTitle: 0, //0不顯示下一頁的標題分隔條,顯示則省略。 title: (dom) => { //自定義標題分隔條要顯示的文字,不使用則省略。 code; return titleText //先經過代碼判斷返回obj。 return { ok: (true添加標題,false不添加), text: titleText } }, bottom: 1000, //不使用observer時,滾動到距離頁面底部剩餘多少高度px時觸發翻下一頁,預設為當前視窗可視範圍的高度screen.height可省略。 sleep: 1000, //翻頁事件注入的間隔時間ms,預設1000可省略。 history: 1, //1翻頁後添加瀏覽器歷史紀錄,不需要則省略。 loading: "msg", //自動翻頁載入中顯示gif或訊息,gif(預設可省略),msg顯示在畫面中間的文字訊息 lazySrc: "selector", //有元素圖片網址放在dataset屬性,IMG元素的src直接使用dataset,DIV、A元素創建style.backgroundImage顯示dataset圖片 script: "//script[contains(text(),'eval')]", //下一頁腳本選擇器,將下一頁的腳本代碼插入到當前頁改變變量,不需要則省略。 bF: (dom) => { //插入下一頁元素之前要執行的代碼,不需要則省略 }, aF: (dom) => { //插入下一頁元素之後要執行的代碼,不需要則省略 } }, category: "autoPager" }
「 點擊展開查看 」
//返回一個指定元素,支持CSS/Xpath選擇器 fun.ge("selector"); fun.ge("selector", doc); fun.ge("selector", node);
//返回所有指定元素,支持CSS/Xpath選擇器 fun.gae("selector"); fun.gae("selector", doc); fun.gae("selector", node);
//取得元素的字串 //mode //1返回指定元素的字串(預設) //2返回指定元素的上一個元素的字串 //3返回指定元素的上上一個元素的字串 fun.gt("selector", mode = 1, doc = document);
//取得非src腳本的字串 //searchValue,關鍵字串或正則表達式 fun.gst(searchValue, doc = document);
//取得元素屬性的值 fun.attr("selector","屬性", doc = document)
//創建一個DIV用來放圖片,#FullPictureLoadMainImgBox //pos 0,添加進指定的元素裡面 //pos 1,插入在指定的元素之前 //pos 2,插入在指定的元素之後 fun.createImgBox(selector, pos = 0);
//返回元素的圖片網址陣列 fun.getImgSrcArr("selector", doc = document); fun.getImgSrcArr([圖片元素陣列]);
//對document.title的字串修改 //mode //0返回【刪除指定字串的標題(預設)】 //1返回【字串切割取[0]去前後空白】 //2返回【字串切割[0] + "字串" + 字串切割[1]】 //3返回【字串切割[1] + "字串" + 字串切割[0]】 fun.title("字串", mode, doc = document)
//觀察元素變化執行callback fun.addMutationObserver(callback, config = MutationObserverConfig, node = document.body);
//將字串解析成document物件 //搭配fetch(url).then(res => res.text())返回的原始碼使用 fun.doc("字串") fetch(url).then(res => res.text()).then(text => { let doc = fun.doc(text); let ele = fun.ge(ele, doc); return ele })
//將字串解析成xml物件 fun.xml("字串")
//顯示簡短訊息 fun.showMsg("字串",1000(顯示的時間,0持續顯示)); //隱藏簡短訊息 fun.hideMsg();
//延遲運行async/await await fun.delay(time);
//等待元素async/await await fun.waitEle(ele, max = 200, doc = document) //間隔100毫秒判斷一次,有元素返回元素超過循環次數返回null。
//等待window物件屬性 await fun.waitVar("declares", max = 200)
//功能基本等同eval() fun.run("代碼")
//創建空陣列,取代[] for push()的寫法 //num陣列的長度 fun.arr(num) fun.arr(num).map((_, i) => { return (i+1); });
//移除元素 fun.remove("selector", time = 0) //如果需要多個選擇器並且CSS/Xpath混寫可寫成數組 let selectors = ["cssSelector" , "XpathSelector"] fun.remove(selectors, time = 0)
//清除所有setTimeout&setInterval定時器 //用匿名函式對付匿名函式,可以解決一部份不讓人打開F12開發人員工具的問題 //mode0,預設運行全部 //mode1,Function.prototype.constructor = () => {}; //mode2,只清setTimeout; //mode3,只清setInterval; fun.clearAllTimer(mode);
//插入樣式,需要先用JS判斷的情況用這個 fun.css("css")
//插入A元素 fun.addUrlHtml(url, ele, pos, text) //url 網址 //ele 元素選擇器 //pos //0在元素之前 //1在元素之後 //2在元素裡面,最後一個子元素之後 //3在元素裡面,第一個子元素之前。 //text 字串
//依序滾動元素 //selector 元素選擇器 //ms 滾動的間隔時間 fun.scrollEles(selector, ms = 100)//依序滾動元素EX //selector 元素選擇器 //callback判斷 //time判斷逾時的時間 let callback = (ele) => fun.ge("img[src]", ele); //ele參數為捲動的元素自身,此例為判斷元素的子元素有沒有出現img[src] let callback = (img) => /^blob/.test(img.src);//此例為判斷元素的src屬性是否已經轉為BlobURL fun.aotoScrollEles(selector, callback, time = 5000)
//確認圖片狀態屬性 返回一個obj await fun.checkImgStatus(src); 返回 { ok:true/false,成功讀取true失敗false width:width,//成功返回圖片寬屬性 height:height//成功返回圖片高屬性 }
//網頁圖片src屬性開頭是blob:的,只能通過再繪製轉換來取得,無法繪製跨域的圖片,會出現跨域汙染的錯誤。 //ele,canvas、img元素選擇器 //type轉換的圖片類型"image/jpeg"、"image/webp"、"image/png" //quality 壓縮比率 0 ~ 1 //返回BlobURL fun.imgToBlobURL(ele, type = "image/jpeg", quality = 1); //範例 [...fun.gae(".mh_comicpic img[src^=blob]")].map(e => fun.imgToBlobURL(e));
//包裝fun.imgToBlobURL函式。 //ele,canvas、img元素選擇器 //type轉換的圖片類型"image/jpeg"、"image/webp"、"image/png" //quality 壓縮比率 0 ~ 1 //返回BlobURL陣列 fun.imgBlobArr(ele, type = "image/jpeg", quality = 1); //範例1:fun.imgBlobArr(".mh_comicpic img[src^=blob]"); //範例2:fun.imgBlobArr(".image>img");
//使用Promise包裝GM_xmlhttpRequest //只取得回應標頭,不接收完整資料,快速確認鏈結的存活狀態。 fun.xhrHEAD(url); let res = await fun.xhrHEAD(url); let status = res.status; if (status == 200) { code } else if (status == 404) { code }
//使用Promise包裝GM_xmlhttpRequest //針對imx.to圖床,返回有顯示圖片的document。 fun.imxXHR(url); fun.imxXHR(url).then(doc => { console.log("測試doc", doc); })
//使用Promise包裝GM_xmlhttpRequest //針對www.imagebam.com圖床,返回有顯示圖片的document。 fun.imageBamXHR(url); fun.imageBamXHR(url).then(doc => { console.log("測試doc", doc); })
//使用Promise包裝GM_xmlhttpRequest //需要跨域CORS、更改參照頁,更改瀏覽器UA時可用。 fun.xhr(url, details = {}) fun.xhr(url, { responseType: "json" }).then(json => { console.log("測試json", json); }) fun.xhr(url, { responseType: "blob" }).then(blob => { console.log("測試blob", blob); })
//使用Promise包裝GM_xmlhttpRequest,返回經過文字編碼的document,避免字元亂碼,需要跨域時使用。 fun.xhrDoc(url, details = {}) fun.xhrDoc(url, { headers: { "Referer": location.href, "User-Agent": navigator.userAgent } }) fun.xhrDoc(url).then(doc => { console.log("測試doc", doc); })
//使用Fetch API,返回經過文字編碼的document,避免字元亂碼。 //無法修改User-Agent fun.fetchDoc(url, options = {}) fun.fetchDoc(url).then(doc => { console.log("測試doc", doc); })
//使用iframe框架,返回iframe框架的document。 //ele元素選擇器指定等待到元素出現(必須) //time框架載入逾時的時間 let callback = (doc, fun) => { //參數doc為iframe的document,fun為可調用的函式庫物件 自由發揮 } await fun.iframeDoc(url, ele, time = 5000, callback);
//使用Fetch API搭配iframe框架,返回iframe框架的document。 //fetch()取得html原始碼傳入iframe框架,需要用iframe框架加載網頁,網站卻又容易卡住逾時時使用,fetch()逾時524或發生400以上錯誤碼,自動重試。 //ele元素選擇器指定等待到元素出現(必須) //time框架載入逾時的時間 let callback = (doc, fun) => { //參數doc為iframe的document,fun為可調用的函式庫物件 自由發揮 } await fun.iframeSrcDoc(url, ele);
//使用iframe框架,等待至指定的declares出現,返回iframe框架的contentWindow。 let iframe = await fun.iframeVar(url, time = 1000, "declares"); let _declares = iframe.declares;
//xhr抓取元素,不局限於圖片 //links網址陣列 //eles要抓的元素 //"targetEle"清空此元素放入allEle //["targetEle", pos] 此元素位置pos,0裡面1之前2之後 //time請求發送的間隔毫秒 await fun.getEle(links, eles, targetEle, removeEle = null, time = 100) //跨域 await fun.getCorsEle(links, eles, targetEle, removeEle = null, time = 100)
//xhr抓取圖片元素,返回圖片網址 (只支持靜態網頁,無法跨域請求) //max填入用fun.geT()取得最大頁數的數字,或想辦法算出最大頁數的數字。 fun.getImg("圖片元素選擇器",max ,mode ,["圖片網址用來替換的字串","圖片網址要被替換的字串"], 請求發送的間隔毫秒) fun.getImg(ele, max, mode = 1, rText = [null, null], time = 100) //網址頁碼數字遞增模式 //第一頁 ==> 第二頁 mode1(預設) .html ==> .html?page=2 ==> ?page=2 mode2 .html ==> /2.html mode3 .html ==> _1.html mode4 / ==> /2/ mode"4" ==> /2 mode5 .html ==> -2.html mode"5" -1.html ==> -2.html mode6 ?p=1 ==> ?p=2 mode7 /1 ==> /2 .html ==> .html/2 mode8 ==> &page=1 mode"8" ==> &page=2 mode9 .html ==> _2.html mode10 .html ==> .html/2 mode11 / ==> /2.html /1.html ==> /2.html mode12 / ==> /2.htm /1.htm ==> /2.htm mode13 -1-* ==> -2-* mode14 /1/ ==> /2/ mode15 / ==> /index_2.html /index.html ==> /index_2.html mode16 ==> /2#list mode17 .htm ==> _2.htm mode18 / ==> /page/2/ mode19 -1 ==> -2 mode20 ==> -p-2 //獨立出來的可調用函式,返回修改後的鏈結 fun.getModeUrl(url, mode, num)
//xhr抓取圖片元素,返回圖片網址 //fun.getImgO基本同fun.getImg,但使用單線程獲取網頁,能設置獲取網頁的間隔時間,類翻頁模式。 fun.getImgO("圖片元素選擇器", max, mode, ["圖片網址用來替換的字串", "圖片網址要被替換的字串"], time(延遲請求下一頁的時間預設200毫秒), "替換頁碼條元素", 0(不顯示獲取訊息)) fun.getImgO(img, maxPage = 1, mode = 1, rText = [null, null], time = 200, paginationEle = null, msg = 1)
//fun.getImgIframe基本同fun.getImg,使用iframe框架單線程獲取網頁,能讓網頁運行必要的javaacript。 fun.getImgIframe("圖片元素選擇器", max, mode, "替換頁碼條元素", time(給予框架讀取的時間), 0 不顯示獲取訊息) fun.getImgIframe(img, max, mode, paginationEle, time, showMsg)
//xhr抓取圖片元素,返回圖片網址 //mode //0多線程(預設) //1單線程 //2單線程,類翻頁模式 //數字大於等於100,請求間隔模式單位毫秒。 //A元素選擇器的href屬性不能是#和javascript或onclick監聽點擊事件,必須是一般的http鏈接。 //A元素參數可以傳入自己創建的網址陣列 fun.getImgA("圖片元素選擇器", "A元素選擇器", mode, ["圖片網址要替換的字串", "圖片網址要被替換的字串"], 0 不顯示獲取訊息) fun.getImgA(img, A, mode = 0, rText = [null, null], showMsg = 1) fun.getImgA("圖片元素選擇器", "A元素選擇器") fun.getImgA("圖片元素選擇器", [網址陣列])
//xhr抓取圖片元素,可跨域抓圖片,返回圖片網址 fun.getImgCorsA("圖片元素選擇器", "A元素選擇器", time = 100) fun.getImgCorsA("圖片元素選擇器", [網址陣列], time = 100)
//翻頁模式聚集圖片或是含A元素的預覽縮圖然後fun.getImgA() fun.getNP("元素選擇器", "下一頁元素元素選擇器或函式", "判斷為最後一頁的元素選擇器或函式", "替換元素選擇器", time(延遲請求下一頁的時間預設0毫秒), dataset = null, 顯示訊息 = 1) //判斷為最後一頁的函式舉例 //doc是下一頁的document const last = doc => { let ele = fun.ge("#showmore", doc); return ele.dataset.page >= ele.dataset.max ? true : false; } const last = doc => { let currentPage = fun.ge("#pagenum", doc).innerText.match(/\d+/)[0]; //下一頁的當前頁數 let totalPage = fun.ge("#pagenum", doc).innerText.match(/\/(\d+)/)[1]; //下一頁的最大頁數 return currentPage >= totalPage ? true : false; //當前頁數大於等於最大頁數是最後一頁 } //用在規則init fun.getNP(ele, nextLinkEle, lastEle, paginationEle, time, dataset, msg); fun.getNP(ele, nextLinkEle); //用在規則imgs,需要用async/await //應用在包子漫畫的用法 imgs: async () => { await fun.getNP(".comic-contain>div:not(.mobadsq)", "//a[contains(text(),'下一頁') or contains(text(),'下一页')]", null, ".comic-chapter>.next_chapter"); let arr = [...fun.gae(".comic-contain amp-img")].map(e => e.getAttribute("src")); return [...new Set(arr)] } //應用在小黃書的用法 imgs: async () => { await fun.getNP(".photos>a", ".pager a[current=true]+a:not(.next)", null, ".pager"); return [...fun.gae(".cr_only")].map(e => e.src.replace("_600x0", "")); }
點擊左下圖示、確定,2步開始下載
右鍵點擊圖示複製圖片網址,如果規則設置了insertImg,按右鍵是先插入全部圖片,第二次按才是複製圖片網址。
PS:需重複獲取原始圖片元素的規則,無法複製圖片網址,例如Civitai。
中鍵點擊圖示匯出網址MediaURLs.txt文件
觸控裝置,長按頁面圖片元素500毫秒,規則insertImg設置為手動則插入圖片或複製圖片網址。
在頁面左下添加了一個圖片下載按鈕
點擊後會彈出輸入資料夾名稱確認窗
確認後就會開始下載壓縮打包圖片
數字鍵 0 下載壓縮
數字鍵 1 複製圖片網址或手動模式的插入圖片
數字鍵 2 捲動至第一張大圖
數字鍵 3 一鍵下載
數字鍵 4 捲動至最後一張大圖
數字鍵 5 切換圖片顯示模式,原始模式和並排模式
數字鍵 6 有自動滾動元素規則時調用
數字鍵 7 匯出網址MediaURLs.txt文件
數字鍵 8 開啟新空白頁載入圖集圖片
數字鍵 - 減鍵圖片以10%為單位比例縮小,會記憶縮放比例
數字鍵 + 加鍵圖片以10%為單位比例放大,會記憶縮放比例
數字鍵 . 點鍵取消縮放恢復為自動
數字鍵 * 乘鍵顯示選項設定。
數字鍵 / 除鍵初始化當前網站的設定。
組合鍵 Ctrl + . 開始或取消自動下載,網站需有必要的相關規則。
組合鍵 Ctrl + Alt + T 頁面選取文字後,按此快捷鍵可以快速設定為腳本用的圖集標題,沒有選取文字也會彈出輸入框能手動輸入自訂標題。
按0、Enter,2步驟開始下載。
按1,複製圖片網址,如果設置了insertImg為手動,按1、Enter是插入圖片,第二次按是複製圖片網址。
按2,捲動至腳本插入的第一張大圖
按3,一鍵下載,跳過自定義標題的步驟。
PS:需重複獲取原始圖片元素的規則,按1無法複製圖片網址,需點擊頁面功能按鈕或選單按鈕的複製圖址。
1.圖片置中模式
上方向鍵跳轉到目前的上一張圖、下方向鍵跳轉到目前的下一張圖
2.圖片並排模式
上方向鍵跳轉到目前的上一排圖、下方向鍵跳轉到目前的下一排圖
漫畫類當跳轉至最後一排後,繼續按下方向鍵會嘗試前往下一集。
所謂的目前是變量記憶的位置,並非當前瀏覽範圍的位置,滑鼠滾動變換位置不會改變變量。
按了上方向鍵和下方向鍵以外的鍵後會再從頭開始跳轉。
如果漫畫站的圖片並排後,圖片高度小於大於瀏覽範圍的高度,需要手動調整瀏覽器的縮放來適配達到最佳的觀看效果。
Chrome內建的縮放跨度太大,建議安裝縮放 for Google Chrome,可以以10%、5%來縮放
3.Fancybox模式
點擊腳本插入的圖片開啟Fancybox圖片燈箱展示功能
右和下方向鍵下一張圖(不會觸發前往下一頁),左和上方向鍵上一張圖(不會觸發前往上一頁),漫畫類和H漫設定欄位為2使用並排模式後請勿使用,因為閱讀順序是錯誤的,需先切換回原始模式。
4.分頁檢視模式
左下有浮動選單區塊,鼠標懸停彈出顯示。
W鍵、A鍵、上左方向鍵跳轉到目前的上一張圖、S鍵、D鍵、下右方向鍵跳轉到目前的下一張圖
數字鍵 0 切換為預設模式自動排列
數字鍵 1 切換為單圖置中模式
數字鍵 2 切換為多圖並排模式
PS:網站如果有Content Security Policy (CSP)限制,將沒有切換模式、圖片跳轉、Fancybox功能,或者莫名其妙不能使用window.open(),將無法使用分頁檢視功能。
為了與東方永頁機共存不會造成衝突,也不需要兩邊開開關關的,整理了東方永頁機黑名單。
2024/05/02 21:05
https://github.com/skofkyo/AutoPager/blob/main/CustomPictureDownload/Blacklist.txt陽春簡易的圖片清單瀏覽模式,和閱讀順序由右至左的漫畫閱讀模式。實現鍵盤瀏覽漫畫,功能只求簡單實用。
※備註SPA網頁,腳本如果沒有生效請重新載入,或是先以新分頁的方式開啟鏈結。
「 點擊展開查看 」
c
「 點擊展開查看 」
漫畫類為了兼容我提交給東方永頁機的翻頁規則和自己寫的專用腳本,規則幾乎都是預設為關閉狀態。
如有需要請透過UI選項設定開啟或幹脆修改腳本規則,也需要關閉東方永頁機或自己加黑名單,不然會衝突。
透過UI開啟當前漫畫站規則的步驟 > 前往漫畫網站的閱讀頁面 > 瀏覽器右上角腳本管理器 > 圖片全載 > 設定 > UI > 勾選啟用當前漫畫站點規則 > 保存設定
2023/11/25 絕大多數漫畫站增加了預讀下一話圖片的功能,有效的減少等待圖片載入的時間。
2024/04/27 為一些常用連線品質較好的網站,添加無限捲動(自動翻頁)閱讀功能,透過腳本管理器選單開啟。
「 點擊展開查看 」
網站 | 備註 |
---|---|
8Comic無限動漫 | m.comicbus.com,有無限捲動模式 |
拷貝漫畫 | copymanga.site,www.copymanga.tv,copymanga.tv,www.mangacopy.com,mangacopy.com,PC版向下滾動隱藏工具列,手機版需在閱讀頁重新載入一次才會生效,有無限捲動模式 |
包子漫画 | 有無限捲動模式 |
Manhuagui看漫画 | tw.manhuagui.com,m.manhuagui.com,有無限捲動模式 |
COCOMANGA | 有無限捲動模式,山寨Manhuagui,圖片載入很慢。 |
DM5 | m.dm5.com,有無限捲動模式 |
極速 | m.1kkk.com,有無限捲動模式 |
漫画人 | Mobile限定,有無限捲動模式 |
Mangabz | PC版向下滾動隱藏工具列,有無限捲動模式 |
Xmanhua | PC版向下滾動隱藏工具列,有無限捲動模式 |
yymanhua | PC版向下滾動隱藏工具列,有無限捲動模式 |
動漫狂 | 動漫狂M,有無限捲動模式 |
漫画DB | 有無限捲動模式 |
漫漫聚 | m.manmanju.cc,閱讀頁添加了下一話鏈接,有無限捲動模式 |
KuKu动漫 | m.ikukudm.cc,閱讀頁添加了下一話鏈接,有無限捲動模式 |
古风漫画网 | m.gufengmh9.com,www.gf618.com,有無限捲動模式 |
来漫画 | m.laimanhua8.com,有無限捲動模式 |
非常爱漫 | 有無限捲動模式 |
漫画160 | m.mh160.cc,有無限捲動模式 |
GODA漫畫 | 发布页 ,news.cocolamanhua.com有無限捲動模式 |
包子漫畫新站 | 閱讀頁域名是baozimh.one |
包子漫畫舊站 | cn.baozimh.org,cn.baozimh.one有無限捲動模式 |
国漫吧 | m.guoman8.cc,有無限捲動模式 |
爱国漫 | m.guoman.net,章節混亂重複都不整理,有無限捲動模式 |
大树漫画 | 部分漫畫雖然被下架但代碼資料還在,依然能插入圖片,章節混亂重複都不整理,有無限捲動模式 |
世伦漫画 | 同上 |
Komiic | SPA網頁,只有下載功能 |
漫画皮 | m.iimanhuapi.com |
风车漫画 | m.qyy158.com |
漫畫狗 | |
风之动漫 | SPA網頁,閱讀頁添加了下一話鏈接,並排模式無法顯示 |
哈哈漫画 | 漫畫列表添加自動翻頁功能 |
明日方舟泰拉记事社 | SPA網頁 |
COLAMANGA | 方向鍵上下章,手動按6自動捲動等待全部圖片載入,或勾選腳本管理器選單的自動捲動所有惰性載入的圖片元素,載入頁面後立即開始自動捲動,下載需先觸發載入全部圖片,圖址如為blob函式會使用到canvas需要繪製過程會有點卡。 |
漫蛙 | uBlock加信任名單https://manwa.me/chapter/*,手動按6自動捲動等待全部圖片載入,或勾選腳本管理器選單的自動捲動所有惰性載入的圖片元素,載入頁面後立即開始自動捲動,閱讀頁去廣告無提示、方向鍵上下章、向下滾動隱藏工具列、更新頁自動載入更多、目錄展開全部章節,下載需先觸發載入全部圖片,函式使用到canvas需要繪製過程會有點卡。 |
樱花漫画 | 圖片伺服器很不穩定,下載很容易404。 |
微信公众号 | 樱花漫画、快岸漫画的漫畫目錄鏈結,有的是導向漢化組的公眾號發布的漫畫鏈結。 |
虎扑社区 | 樱花漫画、快岸漫画的漫畫目錄鏈結,有的是導向漢化組在虎扑社区發布的帖子鏈結。 |
轻之国度 | |
嗨皮漫畫 | 圖片手動插入、閱讀、展開目錄、自動點擊載入、漫畫鏈接新分頁打開,預設關閉 |
mh234 | 預設關閉 |
动漫之家M | m.idmzj.com,預設關閉 |
速漫库 | www.sumanku.com,預設關閉 |
快岸漫画 | 預設關閉 |
亲亲漫画 | m.acgwd.com,預設關閉 |
新新漫画 | m.77mh.xyz,預設關閉 |
仙漫网 | 預設關閉,m.gaonaojin.com |
二次元動漫 | 預設關閉 |
看漫畫 | 預設關閉 |
奴奴漫畫 | 預設關閉 |
木马漫画 | 預設關閉 |
LINE WEBTOON | 目錄聚集所有章節、閱讀,預設關閉 |
咚漫 | 預設關閉 |
動漫啦 | 預設關閉 |
ACG456 | m.acg456.com,預設關閉 |
vomic漫画 | 預設關閉 |
漫本 | 預設關閉 |
動漫戲說 | 預設關閉 |
98漫畫網 | 預設關閉 |
爱看漫画 | 預設關閉 |
92漫画 | m.92mh.com,預設關閉 |
漫画456 | m.manhua456.com,預設關閉 |
90漫画 | m.90mh.org,預設關閉 |
漫画1234 | m.gmh1234.com,預設關閉 |
优酷漫画 | h5.ykmh.com,預設關閉 |
最漫画 | m.zuimh.com,預設關閉 |
漫画连 | m.100mhl.com,預設關閉 |
拼拼漫画 | m.pinmh.com,預設關閉 |
零点漫画 | m.0dmh.com,預設關閉 |
雪儿漫画 | m.xuermh.com,預設關閉 |
狗狗漫画 | m.gougoumh.com,預設關閉 |
漫画看 | m.mhkan.com,預設關閉 |
冰氪漫画 | 預設關閉 |
漫客栈 | 預設關閉 |
漫画屋 | www.cmh5.com,預設關閉 |
笔趣阁漫画 | 預設關閉 |
Go追漫 | 預設關閉 |
有漫画屋 | 預設關閉 |
漫画网 | 預設關閉 |
漫士多 | 預設關閉 |
漫畫屋 | 預設關閉 |
山立漫畫 | 預設關閉 |
TVBS漫畫 | 預設關閉 |
砂之船动漫家 | 預設關閉 |
聚合漫画屋 | 預設關閉 |
酷看漫画 | 預設關閉 |
漫画台 | www.manhuat.cc,預設關閉 |
漫画哥 | m.manhuag.cc,預設關閉 |
哔哩哔哩漫画 | |
看漫画 | 預設關閉 |
「 點擊展開查看 」
請透過腳本管理器選單開啟Lazy Load加載大圖功能,批量下載請使用其他圖片下載腳本。
可點擊右下的眼睛圖示新分頁觀看圖片,並且會顯示抓取到的圖片數量。
網站 | 備註 |
---|---|
Civitai | SPA網頁,Lazy Load加載大圖,支持自動顯示NSFW被模糊的圖片。 |
LiblibAI | SPA網頁,Lazy Load加載大圖。 |
Tensor.Art | SPA網頁,Lazy Load加載大圖。 |
PixAI | SPA網頁,Lazy Load加載大圖。 |
Yodayo | SPA網頁,加載大圖。 |
NightCafe Creator | SPA網頁,Lazy Load加載大圖,不穩定需要上下滾動重複觸發,右下的眼睛數字沒有增加,代表沒有抓到新圖。 |
Midjourney | 沒有更高解析度的圖片,只是能聚集到新分頁觀看。 |
neural.love | SPA網頁,加載大圖。 |
Playground | SPA網頁,Lazy Load加載大圖。 |
Pornderful.ai | SPA網頁,Lazy Load加載大圖,首頁會有閃爍的問題。 |
SeaArt Al | SPA網頁,Lazy Load加載大圖。 |
「 點擊展開查看 」
網站 | 備註 |
---|---|
漫畫類 | 自動展開目錄 |
m.4khd.com | 自動跳轉,擋廣告需加入白名單。 |
4kup.net | 自動跳轉 |
Imgasd | 下載鏈結自動跳轉 |
ouo.io | 自動跳轉 |
cuty.io | 自動跳轉 |
link1s.com | 自動跳轉 |
Binto.click | 自動跳轉 |
stfly.me | 半自動跳轉 |
www.mediafire.com | 自動下載 |
anonfiles.com | 自動下載 |
letsupload.cc | 自動下載 |
94i.in | 自動簽到 |
supjav.com | 立即顯示影片縮圖 |