Greasy Fork is available in English.

小说下载器

一个可扩展的通用型小说下载器。

Versione datata 08/05/2021. Vedi la nuova versione l'ultima versione.

Autore
bgme
Valutazione
0 0 0
Versione
3.6.1.1620480778804
Creato il
26/06/2020
Aggiornato il
08/05/2021
Licenza
AGPL-3.0
Applica a

小说下载器

一个可扩展的通用型小说下载器。

使用方法

特别提醒:本脚本与Greasemonkey脚本管理器不兼容。本脚本执行下载任务时将播放无声音频,以保证脚本后台运行时不被休眠。

如果本脚本支持该小说网站,当打开小说目录页时,网页右上角会出现下载图标,点击该图标即可开始下载。

如果你要下载的小说章节较多,等待时间可能较长,此时请耐心等待。

你通过右下角进度条了解当前下载进度,或者按下 F12,打开网页控制台查看当前下载状态。

下载完成后,本脚本将会自动下载一个TXT文档及由HTML文件及图片组成的ZIP压缩包。

TXT文档请使用记事本或其它阅读软件进行阅读。

ZIP压缩包,请在解压后,直接双击打开HTML文件(ToC.html 为目录文件)进行阅读。

目前支持小说网站

特别提醒:如欲下载支持列表中网站的付费章节,请登录相应网站帐户,并确定已购买相应付费章节。未登录网站帐户,或未购买的付费章节,下载时将直接忽略,无法进行下载。

站点 公共章节 付费章节 备注
刺猬猫 ✅* *VIP章节仅支持图片版。
SF轻小说 ✅* ✅** *不支持对话小说,例:224282。 **VIP章节仅支持图片版。
起点中文网
起点女生网
晋江文学城 ✅* *VIP章节已使用防盗字体对照表去除空格,如在使用中发现VIP章节仍存在空格,请附上所下载的文件进行反馈。
长佩文学 反爬较严,限制下载速度,每分钟约可下载12章,请耐心等待。
轻之文库轻小说 VIP章节仅支持APP查看
纵横中文网
花语女生网
17K小说网
书海小说网
塔读文学
七猫中文网
UU看书网
亿软网
笔趣窝
书趣阁
顶点小说
星空中文
乐文小说网
266看书
和图书
手打吧
阁笔趣
米趣小说
书书网
八一中文网
御书阁 部分文字被图片替换,请使用HTML版查看。
完本神站
得间小说
轻小说文库

高阶使用技巧

自定义筛选函数

如欲只下载部分章节,请在点击运行按钮前,按下 F12 打开开发者工具,在 Window 下创建自定义筛选函数 chapterFilter

class Chapter {
    bookUrl: string;
    bookname: string;
    chapterUrl: string;
    chapterNumber: number;
    chapterName: string | null;
    isVIP: boolean;
    isPaid: boolean | null;
    sectionName: string | null;
    sectionNumber: number | null;
    sectionChapterNumber: number | null;
    chapterParse: ruleClassNamespace.chapterParse;
    charset: string;
    status: Status;
    retryTime: number;
    contentRaw: HTMLElement | null;
    contentText: string | null;
    contentHTML: HTMLElement | null;
    contentImages: attachmentClass[] | null;
    constructor(bookUrl: string, bookname: string, chapterUrl: string, chapterNumber: number, chapterName: string | null, isVIP: boolean, isPaid: boolean | null, sectionName: string | null, sectionNumber: number | null, sectionChapterNumber: number | null, chapterParse: ruleClassNamespace.chapterParse, charset: string);
    init(): Promise<chapterParseObject>;
    private parse;
}

interface chapterFilter {
    (chapter: Chapter): boolean;
}

自定义筛选函数示例:

只下载该本小说前100章内容:

function chapterFilter(chapter) {
  return chapter.chapterNumber <= 100
}

只下载第一卷内容:

function chapterFilter(chapter) {
  return chapter.sectionNumber === 1
}

只下载章节名称中含有“武器”的章节:

function chapterFilter(chapter) {
  return chapter.chapterName.includes("武器")
}

开发

根据 ruleClass 接口实现相应网站解析规则 Class,并在 rules.ts 中添加相应选择规则。

interface BookAdditionalMetadate {
    cover?: attachmentClass;
    attachments?: attachmentClass[];
    tags?: string[];
    lastModified?: number;
    serires?: string;
    seriresNumber?: number;
    ids?: string[] | string;
    publisher?: string;
    languages?: string;
}
class attachmentClass {
    imageUrl: string;
    name: string;
    mode: "naive" | "TM";
    referer?: string;
    status: Status;
    retryTime: number;
    imageBlob: Blob | null;
    constructor(imageUrl: string, name: string, mode: "naive" | "TM");
    init(): Promise<Blob | null>;
    private downloadImage;
    private tmDownloadImage;
}
interface bookParseObject {
    bookUrl: string;
    bookname: string;
    author: string;
    introduction: string | null;
    additionalMetadate: BookAdditionalMetadate;
    chapters: Chapter[];
}
interface chapterParseObject {
    chapterName: string | null;
    contentRaw: HTMLElement | null;
    contentText: string | null;
    contentHTML: HTMLElement | null;
    contentImages: attachmentClass[] | null;
}
declare namespace ruleClassNamespace {
     interface bookParse {
        (): Promise<bookParseObject>;
    }
    interface chapterParse {
        (chapterUrl: string, chapterName: string | null, isVIP: boolean, isPaid: boolean | null, charset: string): Promise<chapterParseObject>;
    }
}
interface ruleClass {
    imageMode: "naive" | "TM";
    charset?: string;
    concurrencyLimit?: number;
    maxRunLimit?: number;
    bookParse(chapterParse: ruleClassNamespace.chapterParse): Promise<bookParseObject>;
    chapterParse(chapterUrl: string, chapterName: string | null, isVIP: boolean, isPaid: boolean | null, charset: string): Promise<chapterParseObject>;
}

License

AGPL-3.0