如有需要支持的站點可反饋,有空的話會嘗試幫寫規則加進腳本內置的規則庫裡,能力有限不保証一定寫的出來。
寫這個腳本的緣由是,想讓下載、複製鏈接不用做展開圖庫挑選圖片的動作,網站沒有限制連接數的話能做到高速聚集所有圖片,還能添加一些我想要的一些輔助功能。
說明:
聚圖!反對將一話一集一章一篇一部拆成好幾頁,一頁一張圖真XXX的有病,整頁用Lazy loading的話還能接受,透過選擇器圈選圖片,能聚集分頁的所有圖片到當前頁面裡,也能進行下載壓縮打包,如有下一頁元素能做到自動化下載,支援自定義規則方便重複使用,後續擴充規則更容易。
用戶寫的規則請自行另外備份,規則只會寫死在腳本裡不會線上規則化,腳本更新就會覆蓋規則。
關於自動下載:
當修改了腳本站點規則啟用了自動下載為autoDownload: [1]時,站點規則insertImg: ["ele", 0]必須改為手動插入圖片,不然會造成衝突,自動下載和自動插入同時間只能擇其一使用,瀏覽器的下載設定需關閉下載前詢問儲存位置和設定好預設的下載路徑,全自動需要有NEXT元素做搭配,每個站點第一次啟用時需等待連續下載2~3次後,觸發瀏覽器詢問是否同意允許下載多個檔案,需同意後後續才能成功下載,並且讓分頁保持在前景運行,可以開一個獨立視窗一個分頁用作下載用。
可用規則範例:
[{
name: "規則名稱",
enable: 0, //填0禁用此規則
icon: 0, //填0不顯示左下圖示
reg: /www\.xxxxx\.com/, //正則表達式匹配網址
include: "元素", //網頁必須包含的元素
exclude: "元素", //網頁要排除的元素
init: "code", //載入頁面後執行一次的代碼
imgs: "#TheImg", //CSS選擇器
imgs: "//img[@id='TheImg']", //XPath選擇器
//IMG、DIV、A,3種元素會先判斷有沒有圖片網址放在dataset屬性,如果沒有IMG取src屬性,A取href屬性。
imgs: "js;code", //也可透過JS代碼自己創建Array,有時大圖是在A元素上需要透過xhr獲取或放在script或變量或透過api取得的json。
//[img, img, img] 圖片元素陣列
//[圖址1, 圖址2, 圖址3]圖片網址陣列
insertImg: ["元素", 1, time], //[清空此元素內容插入圖片, 0(手動)1(自動)2(自動Lazy loading模式)3(手動Lazy loading模式), 自動延遲時間(預設0)]。
insertImg: [
["元素", (插入在此元素) 1(之前) 2(之後), "要移除的元素"], 0(手動) 1(自動) 2(自動Lazy loading模式) 3(手動Lazy loading模式), 自動延遲時間(預設0)
],
customTitle: "code", //自定義JS代碼生成壓縮檔和資料夾名稱,預設是使用當前網頁標題。
autoDownload: [1, time], //1載入頁面後立即開始下載,與next搭配可以實現全自動下載,time延遲幾毫秒後點擊下一頁(預設5000)。
next: "//a[text()='下一章']", //設定下一頁元素綁定右方向鍵點擊下一頁。
prev: "//a[text()='上一章']", //設定上一頁元素綁定左方向鍵點擊上一頁,填1則使用history.back();。
css: "css", //插入自訂樣式,基本上就是用來隱藏廣告用的。
autoClick: "元素", //載入頁面後點擊一次此元素,能簡單做到自動簽到、展開目錄、Show All
autoClick: ["元素", 1000], //元素,延遲時間(預設1000)
observerClick: "元素", //元素進入可視範圍內才點擊,能簡單做到自動載入更多
openInNewTab: ".manga-cover>a:not([target=_blank])", //指定的A元素在新分頁開啟
one: 1, //0多線程,1使用單線程下載,有些網站限制連接數,併發請求容易出錯。
fetch: 1, //使用Fetch API下載圖片,需要網站有支援CORS,如小黃書,4KHD
referer: "src", //暫不支持Fetch API,下載圖片時傳遞的參照頁,預設是使用當前網址,"src"參照頁為圖片網址,也能自訂如"https://www.4khd.com/"
category: "comic" //類別(非必須)
}, {
name: "規則2",
enable: 0,
icon: 0,
reg: /www\.xxxxx\.com/,
include: "",
exclude: "",
init: "",
imgs: "",
insertImg: ["", 0, time],
insertImg: [
["", 1, ""], 2, time
],
customTitle: "",
autoDownload: [1, time],
next: "",
prev: "",
css: "",
autoClick: "",
autoClick: ["", time],
observerClick: "",
openInNewTab: "",
one: 1,
fetch: 1,
referer: "src",
category: ""
}, {
name: "規則3",
…
}]
內置函數:
「 點擊展開查看 」
//可使用在規則init、imgs、customTitle
//返回一個指定元素,支持CSS/Xpath選擇器
fun.ge('元素選擇器', 搭配fun.doc()(可省略)))
//返回所有指定元素,支持CSS/Xpath選擇器
fun.gae('元素選擇器', 搭配fun.doc()(可省略)))
//取得元素的字串
fun.geT('元素選擇器',mode)
mode
1返回指定元素的字串(預設)
2返回指定元素的上一個元素的字串
3返回指定元素的上上一個元素的字串
//取得元素屬性的值
fun.attr('元素','屬性')
//對document.title的字串修改
fun.title('字串',mode)
mode
0返回【刪除指定字串的標題(預設)】
1返回【字串切割取[0]去前後空白】
2返回【字串切割[0] + '字串' + 字串切割[1]】
3返回【字串切割[1] + '字串' + 字串切割[0]】
//將字串解析成document物件
fun.doc('字串')
搭配fetch(url).then(res => res.text())返回的原始碼使用
或串接
fetch(url).then(res => res.text()).then(res => {
let doc = fun.doc(res);
fun.ge(ele, doc);
})
//將字串解析成xml物件
fun.xml('字串')
//顯示訊息
fun.show('字串',1000(顯示的時間,低於1000持續顯示));
//延遲運行async/await
await fun.delay(time);
//用在customTitle需要這樣寫
return new Promise((resolve)=>{setTimeout(()=>{resolve(fun.geT(ele))},time)});
//等同eval()
fun.run('代碼')
//xhr抓取元素 (只支持靜態網頁,無法跨域請求)
fun.getImg('圖片元素選擇器',max ,mode ,['圖片網址用來替換的字串','圖片網址要被替換的字串'](可省略) )
max填入用fun.geT()取得最大頁數的數字,或想辦法算出最大頁數的數字。
fun.getImg(ele, max, mode = 1, rText = [null, null])
網址頁碼數字遞增模式
第一頁 ==> 第二頁
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
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.getImgO('圖片元素選擇器', max, mode, ['圖片網址用來替換的字串', '圖片網址要被替換的字串'], time(延遲請求下一頁的時間預設200毫秒), '替換頁碼條元素', 0(不顯示獲取訊息))
fun.getImgO(img, maxPage = 1, mode = 1, rText = [null, null], time = 200, paginationEle = null, msg = 1)
基本同fun.getImg,但使用單線程獲取網頁,能設置獲取網頁的間隔時間。
fun.getImgIframe('圖片元素選擇器', max, mode, ['圖片網址用來替換的字串', '圖片網址要被替換的字串'], '替換頁碼條元素', time(給予框架讀取的時間), 0 不顯示獲取訊息)
fun.getImgIframe(img, max, mode, [null, null], paginationEle, time, showMsg)
基本同fun.getImg,使用iframe框架單線程獲取網頁,能讓網頁運行必要的javaacript。
fun.getImgA('圖片元素選擇器', 'A元素選擇器', mode, ['圖片網址要替換的字串', '圖片網址要被替換的字串'](可省略), 0 不顯示獲取訊息)
mode
0多線程(預設)
1單線程
3單線程不將A元素替換成圖片元素
A元素選擇器的href屬性不能是#和javascriptc或onclick監聽點擊事件,必須是正常的http鏈接。
fun.getImgA(img, A, one = 0, rText = [null, null], showMsg = 1)
fun.getNP('元素選擇器', '下一頁元素', '判斷為最後一頁的元素', '翻頁後要替換的頁碼條元素', time(延遲請求下一頁的時間預設0毫秒), dataset = null, msg = 1)
翻頁模式聚集圖片或是含A元素的預覽縮圖然後fun.getImgA()
用在規則init
fun.getNP(ele, nextLinkEle, lastEle, paginationEle, time);
fun.getNP(ele, nextLinkEle);
用在規則imgs,需要用async/await
//應用在www.wnacg.org的用法
const get = async () => {
await fun.getNP('.gallary_item', '.thispage+a', null, '.paginator');
return fun.getImgA('#picarea', '.gallary_item a')
};
return get();
//應用在www.nlegs.com的用法
init
fun.getNP(`//div[a/div[contains(@style,'thumb') and span]]`,'li.active+li>a',null,'.pagination')
imgs
fun.getImgA('.img-res','a[href*=image]',1);
//應用在包子漫畫的用法
const get = 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')].forEach(e => {
arr.push(e.getAttribute('src'))
});
arr = [...new Set(arr)];
return arr
};
return get();
應用在小黃書的用法
const get = async () => {
await fun.getNP('.photos>a', '.pager a[current=true]+a:not(.next)', null, '.pager');
let arr = [];
[...fun.gae('img.cr_only')].forEach(e => {
arr.push(e.src.replace('_600x0', ''))
});
return arr;
};
return get();
寫好規則後就只需要
點擊圖示、確定、確定,3步開始下載。
右鍵點擊圖示、確定,2步驟複製圖片網址,如果設置了insertImg,按右鍵是插入圖片,第二次按是複製圖片網址。
腳本有綁定按鍵
數字鍵0下載壓縮、數字鍵1複製圖片網址
按0、Enter、Enter,3步驟開始下載。
按1、Enter,2步驟複製圖片網址。
如果設置了insertImg,按1、Enter是插入圖片,第二次按是複製圖片網址。
圖介
在頁面左下添加了一個圖片下載按鈕
點擊後會彈出確認窗輸入CSS和Xpath選擇圖片元素。
確認後需要再輸入資料夾名稱
確認後就會開始下載壓縮打包圖片
為了與東方永頁機共存不會造成衝突,也不需要兩邊開開關關的,整理了東方永頁機黑名單。
2023/05/05 22:23
https://github.com/skofkyo/AutoPager/blob/main/Blacklist.txt
老司機類內置規則支持列表
2023/05/06
部分秀人相似系列改成了單線程,嫌慢請自行修改成多線程。
「 點擊展開查看 」
H漫類內置規則支持列表
「 點擊展開查看 」
漫畫類內置規則支持列表
漫畫類為了兼容我提交給東方永頁機的翻頁規則和自己寫的專用腳本,幾乎預設為關閉狀態,如有需要這些規則再enable: 1開啟吧,除非需要下載不然幾乎用不到。
「 點擊展開查看 」