{"id":15013771,"url":"https://github.com/jiayaoo3o/18-comic-finder","last_synced_at":"2025-05-14T21:09:45.382Z","repository":{"id":37424829,"uuid":"339307454","full_name":"jiayaoO3O/18-comic-finder","owner":"jiayaoO3O","description":"禁漫天堂Github Actions下载器🧘","archived":false,"fork":false,"pushed_at":"2024-08-01T11:59:29.000Z","size":392,"stargazers_count":1894,"open_issues_count":42,"forks_count":2153,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-04-03T07:08:12.878Z","etag":null,"topics":["github-actions","java","quarkus"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jiayaoO3O.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-02-16T06:38:42.000Z","updated_at":"2025-04-03T03:12:38.000Z","dependencies_parsed_at":"2024-10-14T04:01:08.183Z","dependency_job_id":null,"html_url":"https://github.com/jiayaoO3O/18-comic-finder","commit_stats":{"total_commits":315,"total_committers":2,"mean_commits":157.5,"dds":"0.025396825396825418","last_synced_commit":"6caed4df25859439ef1ed9f3d9048f359c8e50f2"},"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jiayaoO3O%2F18-comic-finder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jiayaoO3O%2F18-comic-finder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jiayaoO3O%2F18-comic-finder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jiayaoO3O%2F18-comic-finder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jiayaoO3O","download_url":"https://codeload.github.com/jiayaoO3O/18-comic-finder/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248352014,"owners_count":21089372,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["github-actions","java","quarkus"],"created_at":"2024-09-24T19:44:45.669Z","updated_at":"2025-04-11T06:19:50.048Z","avatar_url":"https://github.com/jiayaoO3O.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 禁漫天堂下载器\n\n使用GitHub Actions的禁漫天堂爬虫🤡\n\njava这门语言能让小项目变成中项目, 中项目变成大项目 🤡\n\n没什么牛逼的地方, 就是春节假期图一乐🤡\n\n想当初我也是立志成为一位优雅的C#er, 结果现在想要做一个新项目居然首先用java🤡\n\n刚刚暂时不方便打字，但是现在我不禁想问问大家, 是不是应该点一个Star⭐❓\n\n***\n\n**希望大家使用的时候要注意下, 每一次使用爬虫下载都是对禁漫天堂的持续性访问, 所以尽量不要一次性添加太多本漫画, 这样会对禁漫天堂服务器带来比较持久的压力, 最好挑到喜欢的再选择下载, 谢谢🤞**\n\n**⚠因为下载器是根据网页结构进行分析的, 如果禁漫天堂的页面进行了更新, 很可能会下载失败, 所以当使用过程中发现报错,下载失败,缺章漏页, 请提交issue通知我更新代码.**\n\n\n## 更新记录\n\n|       更新日期       | 更新内容 |\n|:----------------:|:-----------------|\n| 2023/02/16 17:00  |  compiler-plugin更新到3.10.1版本，surefire-plugin更新到3.0.0-M9|\n| 2023/02/14 17:00  | **感谢@AragonSnow提供的最新图片切割算法, 大家情人节看漫快乐👀**|\n| 2023/01/27 17:00  | **支持遇到反爬虫五秒盾时自动切换域名**|\n| 2023/01/24 17:00  | 同步跟进quarkus框架到3.0.0.Alpha3版本，surefire-plugin更新到3.0.0-M8|\n| 2022/12/8 11:00  | 同步跟进quarkus框架到3.0.0.Alpha2版本.|\n| 2022/11/15 17:00  | **支持直接将.webp格式转换为.jpg格式, 以免腾不出手的各位每次都双击打开下一张.**|\n| 2022/11/15 17:00  | 同步跟进quarkus框架到3.0.0.Alpha1版本.|\n| 2022/11/05 21:00  | 修复由于不支持TLSv1.3导致握手失败问题.|\n| 2022/10/25 11:00  | 同步跟进quarkus框架到2.13.3.Final版本.|\n| 2022/10/13 17:00  | 同步跟进quarkus框架到2.13.2.Final版本.|\n| 2022/10/7 17:30  | **抛弃切割判断算法, 因为我已经找到需要切割和不需要切割的分界线了, 判断相似度已经没有意义了, 版本升级到5.1.0, 起飞🦽**.|\n| 2022/10/7 14:30  | 优化切割判断算法, 抛弃原有的每一张图判断一次切割规则, 现在通过随机某一张图片判断整章漫画是否需要切割, 现在可能一章中有某一页是错的, 但是大部分都应该是正确的.|\n| 2022/10/7 01:00  | 同步跟进quarkus框架到2.13.1.Final版本.|\n| 2022/10/6 17:00  | 支持下载单页大于300张图的漫画功能.|\n| 2022/10/6 01:00  | **祝大家国庆节假期快乐🧻**.|\n| 2022/10/6 01:00  | 程序退出判断变得更加宽松, 避免缺少部分图片导致程序等待.|\n| 2022/10/6 01:00  | **项目经过部分重构, 变得更难看懂了, 升级版本号到5.0.0🦽**.|\n| 2022/10/6 01:00  | 同步跟进quarkus框架到2.13.0.Final版本.|\n| 2022/10/6 01:00  | 放弃使用graalvm22.2.0, 升级项目到jdk19.|\n| 2022/8/12 01:00  | **由于前端水平太低, 不懂得如何判断某一章节是否需要切割, 所以最终使用了差异值哈希算法进行相似性校验, 绕远路才是我的最短捷径!🦽.**|\n|  2022/8/7 13:00  | 修复章节名称以点结尾时文件夹命名出错问题.|\n|  2022/8/7 12:00  | 修复下载单章漫画报错问题.|\n|  2022/8/7 11:40  | 升级graalvm到22.2.0.|\n|  2022/8/7 11:20  | 升级支持下载webp格式的漫画.|\n|  2022/8/7 11:15  | 同步跟进quarkus框架到2.2.11.2.Final版本.|\n| 2022/4/15 11:15  | 尝试将Graalvm升级到22.0.0.|\n| 2022/4/15 11:10  | 同步跟进quarkus框架到2.8.0.Final版本,因为广州疫情,现在被封在管控区,但是放假太舒坦了,先让我享受一阵放假生活,bug后面再修.🦽|\n| 2022/3/31 11:00  | 修复新版漫画页面样式变更导致下载失败问题.|\n| 2022/3/24 12:00  | 同步跟进quarkus框架到2.8.0.CR1版本.|\n| 2022/3/18 11:20  | 同步跟进quarkus框架到2.7.5.Final版本.|\n|  2022/3/4 11:20  | 同步跟进quarkus框架到2.7.4.Final版本.|\n|  2022/3/4 11:20  | 同步跟进quarkus框架到2.7.3.Final版本.|\n| 2022/2/25 10:50  | 同步跟进quarkus框架到2.7.2.Final版本.|\n| 2022/2/13 21:33  | 同步跟进quarkus框架到2.7.1.Final版本.|\n|  2022/2/6 11:33  | 同步跟进quarkus框架到2.7.0.Final版本.|\n|  2022/2/1 12:33  | 新的一年里祝各位LSP身体健康, 合家欢乐, 虎年大吉😘.|\n| 2022/1/28 09:33  | 同步跟进quarkus框架到2.6.3.Final版本.|\n| 2022/1/19 23:09  | 修复当漫画高度除以分块数取整为0时导致的保存图片失败问题.|\n| 2022/1/15 21:26  | 修复当漫画高度除以分块数非整数时缺失像素导致画面断层问题.|\n| 2022/1/14 11:05  | 同步跟进quarkus框架到2.6.2.Final版本.|\n| 2021/12/21 10:10 | 同步跟进quarkus框架到2.6.1.Final版本.|\n| 2021/12/21 10:10 | 同步跟进quarkus框架到2.6.0.Final版本.|\n| 2021/12/21 10:10 | 同步跟进quarkus框架到2.5.4.Final版本.|\n| 2021/12/13 15:10 | 同步跟进quarkus框架到2.5.2.Final版本.|\n| 2021/12/3 11:15  | 同步跟进quarkus框架到2.5.1.Final版本.|\n| 2021/11/25 17:15 | 同步跟进quarkus框架到2.5.0.Final版本.|\n| 2021/11/8 15:30  | 同步跟进quarkus框架到2.4.1.Final版本.|\n| 2021/11/7 01:10  | 恭喜EDG获得英雄联盟S11全球总决赛冠军🎉重铸LPL荣光, EDG义不容辞!👏.|\n| 2021/10/29 10:38 | 尝试将jdk升级到Graalvm17.|\n| 2021/10/13 16:47 | 2.3.0的quarkus插件有问题,无法读取到配置的settings.xml文件,所以升级到框架2.4.0.CR1.|\n| 2021/10/10 14:30 | 同步跟进quarkus框架到2.3.0.Final版本, 升级程序版本号为4.0.0.|\n| 2021/10/10 14:30 | 修复本地运行时日志编码打印非UTF-8导致乱码问题.|\n| 2021/10/10 14:00 | 终于修复了禁漫天堂cloudflare验证问题,现在可以正常使用了.|\n| 2021/9/12 13:49  | 同步跟进quarkus框架到2.2.2.Final版本.|\n| 2021/9/10 13:38  | **感谢@calject大佬提供的最新图片切割算法💕, 现在终于可以正确切割最新的章节了👏.**|\n| 2021/8/10 16:47  | 同步跟进quarkus框架到2.1.1.Final版本.|\n| 2021/7/28 10:40  | 同步跟进quarkus框架到2.0.3.Final版本.|\n| 2021/7/01 10:40  | 热烈祝贺我党成立100周年🙌, 希望诸位LSP看漫之余不忘初心牢记使命🎉.|\n| 2021/7/01 10:30  | 同步跟进quarkus框架到2.0.0.Final版本.|\n| 2021/5/31 10:43  | 提交3.1.0 release版本.|\n| 2021/5/26 15:40  | 修复由于访问频率过高提示**禁漫娘被你玩壞啦 ??ヽ(??Д`)??休息一分鐘後會好**限制访问导致的爬取失败, 禁漫天堂从接口层面加了访问速度限制之后, 下载会不可避免地变慢, 因为每次触发限制都最少要一分钟才能重新访问.|\n| 2021/5/15 18:34  | 周末突然发现禁漫天堂又撤掉了Cloudflare 5秒盾, 程序又能直接通过github action使用了, 不需要添加cookie.|\n|  2021/5/9 17:30  | **由于禁漫天堂最近加了Cloudflare 5秒盾反爬虫, 暂时需要在配置文件中添加cookie才能爬取, 请根据下方说明添加cookie, 后续我看看用什么方法绕过拦截.**|\n| 2021/4/13 14:30  | 添加触发action的限制, 只有修改了downloadPath.json文件才会触发action, 修改其他文件则不触发.|\n| 2021/3/27 14:04  | v3.0.0 放弃springboot框架, 换成使用响应式框架quarkus, 感觉应该是更快了的.|\n| 2021/2/25 15:16  | **v2.0.0 重大更新, 支持直接使用Github Action自动爬取漫画, 不需要本地部署, 直接输入漫画url然后等待Github Action爬取完成然后下载压缩包即可.**|\n| 2021/2/18 22:15  | v1.2.0支持下载整本只有一章的无章节漫画.|\n| 2021/2/18 16:35  | 添加下载单独某个章节的功能.|\n| 2021/2/18 15:38  | 确保配置文件中配置为空时程序能够正常识别.|\n| 2021/2/17 20:51  | 修复由于章节列表格式不规范导致的获取章节名称失败.|\n\n## GitHub Action使用方法\n\nv2.0.0之后现在支持直接使用Github Action进行下载, 不需要手动部署了.\n\nGithub Action是微软收购github之后推出的CI/CD工具, 你可以理解为这是一台微软免费给你白嫖的2核7G内存的服务器, 每次提交代码都可以触发运行一次服务器.\n\n现在程序支持提交代码之后直接通过这个服务器帮你下载完成漫画, 然后打成一个压缩包, 提供给你下载.\n\n**感谢微软, 微软大法好🙌**\n\n通过以下步骤即可在GitHub Action上运行程序\n\n0. 点击图中fork按钮, fork一份我的项目给你自己.![image.png](https://i.loli.net/2021/02/25/r1EzkUtY4agP3sA.png)\n   如果你以前fork过一次, 然后我提交了代码对bug修复, 但是你不懂得如何将我的修复代码合并到你的仓库, 那你可以直接删掉你的仓库, 重新fork一次.\n\n[comment]: \u003c\u003e \"1. 进入禁漫天堂的主页, 此时会显示让你等待5秒自动重定向的提示:![image.png]\u0026#40;https://i.loli.net/2021/05/09/jWvEzOuNLM4B7XA.png\u0026#41;过完5秒之后, 浏览器才会正常进入禁漫天堂页面, 此时按F12进入浏览器的控制台模式, 按照下图步骤找到当前网页的cookie,  将红色框cookie冒号后面的内容复制出来.![image.png]\u0026#40;https://i.loli.net/2021/05/09/igAnNTWqp4v8mOJ.png\u0026#41;\"\n\n[comment]: \u003c\u003e \"2. 进入`/src/main/resources/application.properties`,点击箭头所指的编辑按钮,对文件进行编辑![image.png]\u0026#40;https://i.loli.net/2021/05/09/qZTihgoCEdQFBUN.png\u0026#41; 只需要改动**comic.request.cookie**这一行, 将刚刚复制的cookie内容粘贴进去, 然后点击提交按钮. ![image.png]\u0026#40;https://i.loli.net/2021/05/09/LpRBsoeHIMYjQm2.png\u0026#41;\"\n\n3. 进入`/src/main/resources/downloadPath.json`, 点击箭头所指的编辑按钮,对该文件进行编辑, **注意使用github action模式的时候只需要修改这个json文件,\n   其他任何文件都不需要修改, 也不要提交pull request到上游来.** ![image.png](https://i.loli.net/2021/02/25/gxre6j2PVYnl53d.png)\n\n4. 按照json格式填入漫画链接, 如果要下载一本, 那格式为(注意英文双引号) :\n   ```json\n   [\n     \"https://18comic.vip/album/180459\"\n   ]\n   ```\n   如果要下载两本或者多本, 格式为(注意英文逗号) :\n    ```json\n    [\n      \"https://18comic.vip/album/180459\",\n      \"https://18comic.vip/album/182168\"\n    ]\n    ```\n\n   注意尽量不要一次性添加太多漫画, 否则下载起来时间要很久, 压缩包也会很大, 并且添加的链接要是直接能访问到禁漫天堂的网站, 而不是各种镜像站, 根据禁漫天堂的公告板提示, 你所添加的漫画域名应该来自以下2个 :\n\n   \u003e [https://18comic.vip](https://18comic.vip/) (最好直接使用这个, 把你的漫画链接域名直接更换成这个就可以了.)\n   \u003e\n   \u003e [https://18comic.org](https://18comic.org/) (如果.vip无法使用, 则尝试使用这个.org站点)\n\n   添加完成之后, 点击下方提交按钮 :\n\n   ![image.png](https://i.loli.net/2021/02/25/O745iyUbfZvBDSN.png)\n\n5. 提交完成之后进入Actions页面查看程序运行状况 :![image.png](https://i.loli.net/2021/02/25/2h4n9q1LuFKCeB6.png)\n\n   ![image.png](https://i.loli.net/2021/02/25/BgwedXxFGtThRC9.png)\n\n   绿色说明运行成功, 黄色说明正在运行, 红色说明运行失败. 运行成功之后, 点击对应的任务 : ![image.png](https://i.loli.net/2021/02/25/gFdOoTW4vtrU9zS.png)\n\n   点击箭头所指的**finder-result**压缩包文件, 即可下载已经打包好的爬虫图片, 注意下载这个压缩包的时间取决于你访问github的速度, 如果没有科学上网可能需要下载很久.\n\n## 本地打包\n\n1. 安装jdk19.\n\n2. 安装maven.\n\n3. 下载源代码并且修改**application.properties**文件中的以下几个配置 :\n\n    - comic.download.path : 下载到本地的目录\n    - comic.proxy.host : 科学上网的ip\n    - comic.proxy.port : 科学上网的端口\n\n[comment]: \u003c\u003e \"    - comic.request.cookie : 禁漫天堂网站的cookie\"\n\n```properties\ncomic.download.path=C:\\\\Users\\\\jiayao\\\\Pictures\ncomic.proxy.host=127.0.0.1\ncomic.proxy.port=10808\n```\n\n4.执行`mvn clean package` 得到最后的jar包\n\n如果直接下载我提供的jar包, 无法手动编辑jar包内的properties文件, 请在jar包所在的目录**新建一个config文件夹**, 在里面新建一个**application.properties**文件,\n然后粘贴并且修改上述几个参数.\n\n## 运行程序\n\n程序现在支持两种运行模式, 作为单次运行的前台模式, 和作为持续运行服务的后台模式\n\n### 前台模式\n\n前台模式是指程序完成下载任务之后会自动关闭, 通过读取代码中的**downloadPath.json**文件内的链接, 或者启动时传入参数来进行下载, 每一次下载都要运行一次程序.\n\n如果有条件手动打包程序, 则进入`/src/main/resources/downloadPath.json`目录, 按照json格式填入漫画链接, 如果要下载一本, 那格式为 :\n\n```json\n[\n  \"https://18comic.vip/album/180459/\"\n]\n```\n\n如果要下载两本或者多本, 格式为(注意逗号) :\n\n ```json\n[\n  \"https://18comic.vip/album/180459/\",\n  \"https://18comic.vip/album/182168\"\n]\n ```\n\n前台模式与后台模式都支持下载整本漫画或者单独某个章节.\n\n添加数据之后, 打包, 然后在确保已经有jdk19之后, 命令行中进入jar包所在的目录, 执行`java -jar ./*.jar`\n即可按照前台模式运行程序, 程序会自动下载json文件中的所有漫画 , 当下载完成之后, 程序会自动退出.\n\n如果没有条件打包程序, 但是有条件运行程序, 例如只装了jdk19但是没有安装maven等, 那就直接下载我提供的jar包, 按照前面说所方法在jar包所在的目录新建一个config文件夹,\n在里面新建一个application.properties文件, 粘贴并且修改上述几个参数, 然后命令行进入jar所在的目录, 执行`java -jar ./*.jar 漫画路径1 漫画路径2`\n,例如 `java -jar ./*.jar https://18comic.vip/album/180459` , 这时候这本漫画就会被下载, 多本漫画请用空格隔开.\n\n### 后台模式\n\n后台模式是指程序将会作为一个服务持续运行, 通过等待接口请求来下载漫画, 每一次请求接口就会进行一次下载, 程序完成下载后不会自动关闭.\n\n程序打包或者下载我提供的jar包, 然后在确保已经有jdk19之后, 命令行中进入jar包所在的目录, 执行`java -jar ./*.jar -s`(注意-s参数)即可按照后台模式运行程序 ,\n当下载完成之后, 程序会继续等待服务.\n\n运行程序之后打开浏览器, 在地址栏输入 :\n\n```url\nhttp://localhost:7788/finder/download?homePage=你想要下载的漫画主页\n```\n\n即可开始下载整本漫画, 例如\n\n```url\nhttp://localhost:7788/finder/download?homePage=https://18comic.vip/album/177680\n```\n\n如果想要下载单独的某一个章节, 只需要输入对应的章节主页即可, 例如\n\n```url\nhttp://localhost:7788/finder/download?homePage=https://18comic.vip/photo/211115\n```\n\n## 项目特点\n\n- 使用quarkus框架\n- 支持github actions\n- 没有用到爬虫库, 纯用hutool对html页面进行切分.\n- 多线程异步爬虫.\n- 对2020-10-27之后的反爬虫图片进行了反反爬虫处理.\n\n## TODO\n\n- [ ] 使用jdk19的虚拟线程改造程序\n- [x] 支持github action\n- [x] 支持单独下载某个章节而不是每一次都下载完整的一本漫画.\n- [x] 支持下载整本只有一章的无章节漫画.\n- [x] 通过指定外部配置文件来覆盖内部配置文件, 对于直接下载jar包的用户不需要先解压修改配置文件后再压缩回去.\n\n## 鸣谢列表\n\n- [@AragonSnow](https://github.com/AragonSnow) : 提供了新版禁漫天堂前端切割算法.\n- [@lizongcong](https://github.com/lizongcong) : 提供了只有更新json文件才会触发action的建议.\n- [@calject](https://github.com/calject) : 提供了新版禁漫天堂前端切割算法.\n- [@Yiyi-philosophy](https://github.com/Yiyi-philosophy) : 提供了直接将.webp转换为.jpg的建议.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjiayaoo3o%2F18-comic-finder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjiayaoo3o%2F18-comic-finder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjiayaoo3o%2F18-comic-finder/lists"}