|
1 | | -起點以及其他知名小說站都推薦用這個腳本[【小說】下載腳本](https://github.com/dodying/UserJs/tree/master/novel/novelDownloader),遇到沒人願意適配的不知名小站再考慮我的腳本。 |
| 1 | +起點等都推薦用這個腳本[【小說】下載腳本](https://github.com/dodying/UserJs/tree/master/novel/novelDownloader),遇到沒人願意適配的小站再考慮我的腳本。 |
2 | 2 |
|
3 | 3 | 輕量級抓取腳本,用於下載網頁小説或其他文字內容,理論上通用於任何靜態寫入正文的小說網站、論壇、貼吧等而無需規則。 |
4 | 4 |
|
5 | | -腳本會自動檢索頁面中的主要內容並下載(省得複製完gal攻略還要手動逐條刪除「某某某13級頭銜水龍王發表於X年X月X日來自XX客戶端」)。 |
| 5 | +腳本會自動檢索頁面中的主要內容並下載(<del>省得複製完gal攻略還要手動逐條刪除「某某某13級頭銜水龍王發表於X年X月X日來自XX客戶端」</del>)。 |
6 | 6 | 如果位於小說目錄頁會遍歷所有章節並排序拼接後存為TXT文檔。 |
7 | 7 |
|
8 | 8 | [](https://github.com/hoothin/UserScripts) [【高亮或者格式化網頁中選中的代碼,並統計字數】](https://greasyfork.org/scripts/24150-highlight-every-code) |
|
14 | 14 | + 按下 `CTRL+F9` 或點擊命令菜單 |
15 | 15 | + 按下 `SHIFT+CTRL+F9` 忽略目錄,僅下載當前頁 |
16 | 16 |
|
| 17 | +若是遇到下載出錯的站點,可隨意提交issue至[Github](https://github.com/hoothin/UserScripts/issues),我若恰好有空便會嘗試幫你查錯或編寫自定義規則。 |
17 | 18 |
|
18 | 19 | *對你有幫助的話,請透過[PayPal管道](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=rixixi@sina.com&item_name=Greasy+Fork+donation)请我喝一杯奶茶* |
19 | 20 |
|
20 | 21 | <img src='https://s2.loli.net/2022/01/06/lEqKWLHG7UBO6AY.jpg' alt="donation" width=420> |
21 | 22 |
|
22 | | -#怠惰心法 |
| 23 | +## 怠惰心法 |
| 24 | +<del>名喚怠惰,實為勤勉</del> |
23 | 25 | 此功共有七層,以第一層最易,第七層最難。 |
24 | | -### 第一層心法 |
| 26 | +### 第一層心法(極易) |
25 | 27 |
|
26 | 28 | **CTRL+F9** 就完事了唄。 |
27 | | -### 第二層心法 |
| 29 | +### 第二層心法(超易) |
28 | 30 |
|
29 | | - 假若章節連結沒有 xx 章、xx 節、xx 話之類的特徵字樣,可點擊**自定義下載**,輸入隨便一個章節名,例如 「眾神的風車」,即可標記所有同級連結為目錄章節並下載。假如頁面有兩套章節格式,可標記多個,例如「眾神的風車,風車的眾神」。亦可標記排除項,例如「眾神的風車01!02!03,風車的眾神!鐵幕」,代表標記「眾神的風車01」同級連結並排除含有 02 的項和含有 03 的項,同時標記「風車的眾神」同級連結並排除含有“鐵幕”的項。 |
30 | | -### 第三層心法 |
| 31 | + 倘若章節連結沒有xx章、xx節、xx話之類的特徵字樣,可點擊**自定義下載**,輸入隨便一個章節名,例如 「眾神的風車」,即可標記所有同級連結為目錄章節並下載。假如頁面有兩套章節格式,也可標記多個,例如「眾神的風車,風車的眾神」。亦可標記排除項,例如「眾神的風車01!02!03,風車的眾神!鐵幕」,代表標記「眾神的風車01」同級連結並排除含有 02 的項和含有 03 的項,同時標記「風車的眾神」同級連結並排除含有「鐵幕」的項。 |
| 32 | +### 第三層心法(略易) |
31 | 33 |
|
32 | | - 如果內頁沒有正文,但章節連結與真實內容連結有關聯,可通過**自定義下載**,替換連結內容獲取真實內容。例如 【`眾神的風車@@articles@@articlescontent`】,即可替換章節URL中的 article 為 articlescontent 。 |
33 | | -### 第四層心法 |
| 34 | + 如果內頁沒有正文,但章節連結與真實內容連結有關聯,可通過**自定義下載**,替換連結內容獲取真實內容。例如 【`眾神的風車@@articles@@articlescontent`】,即可替換章節 URL 中的 articles 為 articlescontent 並自動獲取內容。 |
| 35 | +### 第四層心法(略難) |
34 | 36 |
|
35 | 37 | 如果連結無法由直接替換得到最終地址,可用正則替換,例如【`眾神的風車@@articles(\d+)@@articlescontent_$1b`】,即可替換章節 URL 中的 articles1、articles2 為 |
36 | 38 | `articlescontent_1b、articlescontent_2b` |
37 | | -### 第五層心法 |
| 39 | +### 第五層心法(難) |
38 | 40 |
|
39 | | - 輸入章節的 css 選擇器可以更精確地標記章節連結。例如`.l_chaptname>a`,代表 class 為 l_chaptname 的元素下的a連結。 |
40 | | - 下載內容可能含有干擾碼,此時只需點擊**懶人小說下載設置**,輸入干擾碼的 css 選擇器即可排除干擾碼。例如 `.mask,.ksam`,代表刪除 class 為 mask 或者 ksam 的元素。 |
41 | | -### 第六層心法 |
| 41 | + 輸入章節的 css 選擇器可以更精確地標記章節連結。例如`.l_chaptname>a`,代表 class 為 l_chaptname 的元素下的 a 連結。 |
| 42 | + 下載內容可能含有干擾碼,此時只需點擊**懶人小說下載設置**,輸入干擾碼的 css 選擇器即可排除干擾碼。例如 `.mask,.ksam,font.jammer`,代表刪除 class 為 mask 或者 ksam 的元素或者 class 為 jammer 的 font 元素。 |
| 43 | +### 第六層心法(超難) |
42 | 44 |
|
43 | | - 假若正文不在內頁正文,是頁面加載後處理得到的,可點擊**自定義下載**,輸入自定義代碼對內頁進行分析獲取正確結果。例如 【`眾神的風車@@@@@@var noval=JSON.parse(data.querySelector("#meta-preload-data").content).novel;noval[Object.keys(noval)[0]].content;`】,即可忽略正文,只通過自定義代碼處理返回頁面獲取內容。代碼中使用 data 可以獲得返回頁面的 document ,最後一個表達式的值為最終寫入的內容。 |
44 | | -### 第七層心法 |
| 45 | + 倘若正文不在內頁正文,是頁面加載後處理得到的,可點擊**自定義下載**,輸入自定義代碼對內頁進行分析獲取正確結果。例如 【`眾神的風車@@@@@@var noval=JSON.parse(data.querySelector("#meta-preload-data").content).novel;noval[Object.keys(noval)[0]].content;`】,即可通過自定義代碼處理返回頁面獲取內容。代碼中使用 data 可以獲得返回頁面的 document,最後一個表達式的值為最終寫入的內容。 |
45 | 46 |
|
46 | | - 假若正文已經經過加密,需要解密才能獲取正確內容,可打開瀏覽器的控制台,自定義 dacProcess 函數,調取頁面中網站自身的解密代碼處理抓取的加密數據。例如控制台輸入`dacProcess=data=>{return decrypt(xxx);}` 代表調用網站的 decrypt 解密章節頁面返回的數據。然後再點擊**自定義下載**,需要注意自定義下載時標記章節是必需的。 |
47 | | -###關於配置項 |
48 | | - **【以下功能需要通過油猴命令菜單進入】** |
| 47 | + 倘若章節沒有連結,點擊後方才生成連結跳轉,可通過 `>>` 管道處理抓取到的元素生成章節連結,詳情見下方例子。 |
| 48 | +### 第七層心法(極難) |
| 49 | + |
| 50 | + 倘若正文已經經過加密,需要解密才能獲取正確內容,可打開瀏覽器的控制台,自定義 dacProcess 函數,調取頁面中網站自身的解密代碼處理抓取的加密數據。例如控制台輸入`dacProcess=data=>{return decrypt(xxx);}` 代表調用網站的 decrypt 解密章節頁面返回的數據。然後再點擊**自定義下載**,需要注意自定義下載時標記章節是必需的。 |
| 51 | + |
| 52 | +### 關於配置項 |
| 53 | + **【以下功能需要通過 Tampermonkey 等管理器的命令菜單進入】** |
49 | 54 |
|
50 | 55 |  |
51 | | - - 自定義目錄:如https://xxx.xxx/book-**[20-99]**.html,https://xxx.xxx/book-**[01-10]**.html,意為下載book-20.html到book-99.html,以及book-01.html到book-10.html,使用**[1-10]**則不補0。 |
52 | | - - 章節選擇器自定義:輸入章節連結的css選擇器即可,後面可以接上url替換碼、以及自定義處理代碼。 |
53 | | - - 干擾碼:填入干擾碼的css選擇器,如`.mask,.ksam`,意為刪除class為mask或者ksam的元素。 |
| 56 | + - 自定義目錄:如`https://xxx.xxx/book-**[20-99]**.html,https://xxx.xxx/book-**[01-10]**.html`,意思為下載book-20.html到book-99.html,以及book-01.html到book-10.html,使用**[1-10]**則不補0。 |
| 57 | + - 章節選擇器自定義:輸入章節連結的 css 選擇器即可,後面可以接上 url 替換碼、以及自定義處理代碼。 |
| 58 | + - 干擾碼:填入干擾碼的 css 選擇器,如`.mask,.ksam`,意為刪除 class 為 mask 或者 ksam 的元素。 |
54 | 59 | - 按標題名重新排序:是則把目錄頁所有連結按標題名排序後存入txt,否則按頁面位置順序排列。 |
55 | | - - 下載線程數:同時下載的線程數,默認為20,遇到存在限制的站點可調低。 |
| 60 | + - 下載線程數:同時下載的線程數,默認為20,遇到存在限制的站點(例如下載時總有章節獲取失敗)可調低。 |
56 | 61 |
|
57 | | -### 自定義例子 |
58 | | - 1. [***po18***](https://www.po18.tw/books/755779/articles),章節的選擇器為 `.l_chaptname>a` ,輸入並下載後發現通過 url 無法下載正文內容,正文是 ajax 通過 articlescontent 下載的。此時可後接 `@@articles@@articlescontent` (@@ 分隔) 將章節 url 中的 articles 替換為 articlescontent 。 綜上 **`.l_chaptname>a@@articles@@articlescontent`** 即可適配該站。其中第一個 articles 可使用正則,例如 `@@articles(\d+)@@$1content` 代表將連結中的「articles1」「articles2」等替換為「1content」「2content」。 |
59 | | - 2. [***pixiv***](https://www.pixiv.net/novel/series/7807554),p站小說的章節選擇器為`main>section ul>li>div>a`,無需替換連結,因此後兩項留空。有6個@了 😂。正文在meta里,需要自定義代碼提取meta-preload數據的content項。綜上 **`main>section ul>li>div>a@@@@@@var noval=JSON.parse(data.querySelector("#meta-preload-data").content).novel;noval[Object.keys(noval)[0]].content;`** 即可下載p站小說。其中「data」代表抓取網頁的document對象,若返回的是純文本,則用 `data.body.innerText` 獲取。 |
| 62 | +### 簡易自定義例子 |
| 63 | + 1. [po18](https://www.po18.tw/books/755779/articles),章節的選擇器為 `.l_chaptname>a` ,輸入並下載後發現通過 url 無法下載正文內容,正文是 ajax 通過 articlescontent 下載的。此時可後接 `@@articles@@articlescontent` (@@ 分隔) 將章節 url 中的 articles 替換為 articlescontent 。 綜上 【`.l_chaptname>a@@articles@@articlescontent`】 可適配該站,粘貼進命令菜單即可下載。其中第一個 articles 可使用正則,例如 `@@articles(\d+)@@$1content` 代表將連結中的「articles1」「articles2」等替換為「1content」「2content」。 |
| 64 | + 2. [pixiv](https://www.pixiv.net/novel/series/7807554),p站小說的章節選擇器為`main>section ul>li>div>a`,無需替換連結,因此後兩項留空。有6個@了 😂。正文在meta里,需要自定義代碼提取meta-preload數據的content項。綜上 【`main>section ul>li>div>a@@@@@@var noval=JSON.parse(data.querySelector("#meta-preload-data").content).novel;noval[Object.keys(noval)[0]].content;`】 即可下載p站小說。其中 "data" 代表抓取網頁的document對象,若返回的是純文本,則用 `data.body.innerText` 獲取。 |
| 65 | + 3. [紅薯中文網](https://g.hongshu.com/chapterlist/91735.do),這個站沒有目錄連結,此時可以遍歷標籤自己創建目錄連結下載【`ul#lists>li>>let href=item.getAttribute("onclick").replace(/.*(http.*html).*/,"$1"),innerText=item.querySelector("span").innerText;return {href:href,innerText:innerText};@@@@@@let rdtext=data.querySelector('div.rdtext');let sc=data.querySelector('div.ewm+script');if(sc&&rdtext){let code=sc.innerText.replace(/for\(var i=0x0;i<words.*/,"window.words=words;");eval(code);[].forEach.call(rdtext.querySelectorAll('span[class]'),span=>{let id=span.className.replace(/[^\d]/ig,"");span.innerText=words[id]}),rdtext.innerText};`】 |
60 | 66 |
|
61 | 67 | ### 測試網頁 |
62 | 68 | + http://www.gulongbbs.com/zhentan/bdlr/plje/Index.html |
63 | 69 | + http://www.jhshe.cn/thread-1837-1-1.html |
64 | 70 | + http://tieba.baidu.com/p/4871634479 |
65 | 71 |
|
| 72 | +### FAQ |
| 73 | +- 章節沒有「第幾章第幾節」的字樣怎麼辦?<br> |
| 74 | +參考第二層心法輸入其中一個章節名即可 |
| 75 | +- 下載一定章節後失敗怎麼辦?<br> |
| 76 | +可能是網站限制了並發數,在設置中調低線程數即可 |
| 77 | +- 按下快捷鍵無效怎麼辦?<br> |
| 78 | +可能是快捷鍵被其他應用接管了,使用腳本管理器中的命令菜單下載即可 |
| 79 | +- 有無關干擾字符怎麼辦?<br> |
| 80 | +設置里輸入干擾碼css選擇器即可,多個選擇器用逗號分隔 |
| 81 | + |
66 | 82 | ### 為啥要寫這個腳本? |
67 | 83 | 主要是<img src="https://stickershop.line-scdn.net/stickershop/v1/product/8692/LINEStorePC/main.png;compress=true" width=50 alt="怠惰啊" title="怠惰啊"/> |
| 84 | +因為我要下載馳星周的漂流街,卻發現前人的輪子「【小說】下載腳本」不能用,又不想為這破站 🙃 寫規則,而且<del>我就是看不上霸道總裁修仙穿越你咬我啊</del>指不定它三天兩頭改個版呢。寫個通用規則的腳本,一來可以不用追著數不清的小說站適配修改更新,二來也免去了法律風險。 |
| 85 | +這個腳本會自動去查找主要內容並下載,不需要寫規則。當然如果你家網站廣告內容比正文還多我也沒辦法。 |
| 86 | +遇到特殊網站還是建議用「【小說】下載腳本」。 |
0 commit comments