📚书海阁
https://book.washai.net
laizhiyu (6509)11/04 23:43
【书海阁 book.washai.net · 2026-11-04】
· 全站 UTF-8 / Cloudflare / SSR 服务端渲染;游客可读搜索·详情·目录·正文(实测后期章节 needBuy=false),无需登录,故不写登录 UI 与登录状态检查按钮
· 搜索:GET /book/bookclass.html?k={{key}}(页面无 form;站点 common.js 的 searchByK 明确跳转该地址),SSR 直出 #bookList
· 限速:concurrentRate=1/2000(全站 2 秒 1 请求),避免搜索过于频繁触发风控;目录 100 章/页串行分页,长篇约 12 页会慢一些,属限速权衡(可自行调成 1/1000)
· UA:header 字段内置完整 Chrome UA(书源真字段名是 header,不是带 Map 后缀的字段;写错会被 Gson 静默丢弃)
· 详情与目录分离:tocUrl → /book/indexList-.html;不写 intro,因详情页 #bookDesc 是站方 SEO 套话,保留搜索结果里的真简介
· 目录分页:每页 100 章,第1页 indexList-.html、第2页起 indexList//.html;nextTocUrl 只按「下一页」文案取 1 个 URL,末页 return null(防「上一页」回环)
· 目录 chapterList 写 id.bookIndexList@tag.li@tag.a:部分书首页混有 li.catalogVolumeHeading 卷标题(无 ),直接选 a 元素可自动排除;★Default 规则的 [xxx] 是数组索引语法不是 CSS 属性选择器,写 tag.li[data-index-id] 会被误解析导致「列表大小:0 → TocEmptyException」(要属性选择器必须用 @css: 前缀)
· 正文:#showReading 下的 readChapterAppendBody;实测末章(大结局)needBuy=false 正文直出,游客无需登录(★不能用 #readPanel:页面恒含隐藏的「此章为VIP章节,需要订阅」#vipPanel,会污染正文)
· 无章内分页(flipPageProgress=1/1),「下一章」是独立章节 URL 且已被目录覆盖,故不写 nextContentUrl 防串章
· 发现:全部作品 + 8 分类(带 {{page}} 分页)+ 4 榜单(单页 30 本,站点无分页);榜单作者栏偶有「榜单第一」占位数据,已用 ## 规则清空
· wordCount 用 @js: 从卡片元素取 p.classBookMeta / p.rankCardMeta(★不能把 ##替换 与 ||组合符 混写:替换段会吞掉后半段规则文本)
· 兼容性:列表规则全用 Default/CSS 选择器(不返回 JS 数组),nextTocUrl 用 IIFE 返回 String/null,兼容 Legado 官方版与 legado-E
· 未检测到网址发布页:首页无「发布页/备用/网址/线路/镜像」字样,washai.net / www / m 三个根域均无 DNS 记录 ⇒ 按需求不写线路管理面板 {
"bookSourceComment": "【书海阁 book.washai.net · 2026-11-04】\n· 全站 UTF-8 \/ Cloudflare \/ SSR 服务端渲染;游客可读搜索·详情·目录·正文(实测后期章节 needBuy=false),无需登录,故不写登录 UI 与登录状态检查按钮\n· 搜索:GET \/book\/bookclass.html?k={{key}}(页面无 form;站点 common.js 的 searchByK 明确跳转该地址),SSR 直出 #bookList\n· 限速:concurrentRate=1\/2000(全站 2 秒 1 请求),避免搜索过于频繁触发风控;目录 100 章\/页串行分页,长篇约 12 页会慢一些,属限速权衡(可自行调成 1\/1000)\n· UA:header 字段内置完整 Chrome UA(书源真字段名是 header,不是带 Map 后缀的字段;写错会被 Gson 静默丢弃)\n· 详情与目录分离:tocUrl → \/book\/indexList-<id>.html;不写 intro,因详情页 #bookDesc 是站方 SEO 套话,保留搜索结果里的真简介\n· 目录分页:每页 100 章,第1页 indexList-<id>.html、第2页起 indexList\/<id>\/<N>.html;nextTocUrl 只按「下一页」文案取 1 个 URL,末页 return null(防「上一页」回环)\n· 目录 chapterList 写 id.bookIndexList@tag.li@tag.a:部分书首页混有 li.catalogVolumeHeading 卷标题(无 <a>),直接选 a 元素可自动排除;★Default 规则的 [xxx] 是数组索引语法不是 CSS 属性选择器,写 tag.li[data-index-id] 会被误解析导致「列表大小:0 → TocEmptyException」(要属性选择器必须用 @css: 前缀)\n· 正文:#showReading 下的 readChapterAppendBody;实测末章(大结局)needBuy=false 正文直出,游客无需登录(★不能用 #readPanel:页面恒含隐藏的「此章为VIP章节,需要订阅」#vipPanel,会污染正文)\n· 无章内分页(flipPageProgress=1\/1),「下一章」是独立章节 URL 且已被目录覆盖,故不写 nextContentUrl 防串章\n· 发现:全部作品 + 8 分类(带 {{page}} 分页)+ 4 榜单(单页 30 本,站点无分页);榜单作者栏偶有「榜单第一」占位数据,已用 ## 规则清空\n· wordCount 用 @js: 从卡片元素取 p.classBookMeta \/ p.rankCardMeta(★不能把 ##替换 与 ||组合符 混写:替换段会吞掉后半段规则文本)\n· 兼容性:列表规则全用 Default\/CSS 选择器(不返回 JS 数组),nextTocUrl 用 IIFE 返回 String\/null,兼容 Legado 官方版与 legado-E\n· 未检测到网址发布页:首页无「发布页\/备用\/网址\/线路\/镜像」字样,washai.net \/ www \/ m 三个根域均无 DNS 记录 ⇒ 按需求不写线路管理面板",
"bookSourceGroup": "AI",
"bookSourceName": "📚书海阁",
"bookSourceType": 0,
"bookSourceUrl": "https:\/\/book.washai.net",
"bookUrlPattern": "^https?:\/\/book\\.washai\\.net\/book\/(?:indexList-\\d+\\.html|indexList\/\\d+\/\\d+\\.html|\\d+\\.html|\\d+\/\\d+\\.html)(?:\\?.*)?$",
"concurrentRate": "1\/1000",
"customButton": false,
"customOrder": 0,
"enabled": true,
"enabledCookieJar": true,
"enabledExplore": true,
"eventListener": false,
"exploreUrl": "[{\"title\": \"▌全部作品 · 可翻页\", \"url\": \"\", \"style\": {\"layout_flexBasisPercent\": 1, \"layout_wrapBefore\": true}}, {\"title\": \"全部作品\", \"url\": \"https:\/\/book.washai.net\/book\/bookclass.html?page={{page}}\", \"style\": {\"layout_flexBasisPercent\": 0.5}}, {\"title\": \"▌分类浏览 · 可翻页\", \"url\": \"\", \"style\": {\"layout_flexBasisPercent\": 1, \"layout_wrapBefore\": true}}, {\"title\": \"玄幻奇幻\", \"url\": \"https:\/\/book.washai.net\/book\/bookclass.html?c=1&page={{page}}\", \"style\": {\"layout_flexBasisPercent\": 0.5}}, {\"title\": \"武侠仙侠\", \"url\": \"https:\/\/book.washai.net\/book\/bookclass.html?c=2&page={{page}}\", \"style\": {\"layout_flexBasisPercent\": 0.5}}, {\"title\": \"都市言情\", \"url\": \"https:\/\/book.washai.net\/book\/bookclass.html?c=3&page={{page}}\", \"style\": {\"layout_flexBasisPercent\": 0.5}}, {\"title\": \"历史军事\", \"url\": \"https:\/\/book.washai.net\/book\/bookclass.html?c=4&page={{page}}\", \"style\": {\"layout_flexBasisPercent\": 0.5}}, {\"title\": \"科幻灵异\", \"url\": \"https:\/\/book.washai.net\/book\/bookclass.html?c=5&page={{page}}\", \"style\": {\"layout_flexBasisPercent\": 0.5}}, {\"title\": \"网游竞技\", \"url\": \"https:\/\/book.washai.net\/book\/bookclass.html?c=6&page={{page}}\", \"style\": {\"layout_flexBasisPercent\": 0.5}}, {\"title\": \"女生频道\", \"url\": \"https:\/\/book.washai.net\/book\/bookclass.html?c=7&page={{page}}\", \"style\": {\"layout_flexBasisPercent\": 0.5}}, {\"title\": \"次元同人\", \"url\": \"https:\/\/book.washai.net\/book\/bookclass.html?c=8&page={{page}}\", \"style\": {\"layout_flexBasisPercent\": 0.5}}, {\"title\": \"▌排行榜 · 单页30本\", \"url\": \"\", \"style\": {\"layout_flexBasisPercent\": 1, \"layout_wrapBefore\": true}}, {\"title\": \"人气榜\", \"url\": \"https:\/\/book.washai.net\/book\/book_ranking.html?type=0\", \"style\": {\"layout_flexBasisPercent\": 0.5}}, {\"title\": \"新书榜\", \"url\": \"https:\/\/book.washai.net\/book\/book_ranking.html?type=1\", \"style\": {\"layout_flexBasisPercent\": 0.5}}, {\"title\": \"更新榜\", \"url\": \"https:\/\/book.washai.net\/book\/book_ranking.html?type=2\", \"style\": {\"layout_flexBasisPercent\": 0.5}}, {\"title\": \"评论榜\", \"url\": \"https:\/\/book.washai.net\/book\/book_ranking.html?type=3\", \"style\": {\"layout_flexBasisPercent\": 0.5}}]",
"header": "{\"User-Agent\": \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/120.0.0.0 Safari\/537.36\", \"Accept\": \"text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/avif,image\/webp,*\/*;q=0.8\", \"Accept-Language\": \"zh-CN,zh;q=0.9\"}",
"lastUpdateTime": "1793807034620",
"respondTime": 180000,
"ruleBookInfo": {
"author": "id.bookAuthor@text",
"coverUrl": "id.bookCoverImg@src",
"kind": "id.bookCatBadge@text",
"lastChapter": "id.lastIndexLink@text",
"name": "id.bookName@text",
"tocUrl": "id.allIndexLink@href",
"wordCount": "id.bookWordCount@text"
},
"ruleContent": {
"content": "id.showReading@class.readChapterAppendBody@html##<script[\\s\\S]*?<\/script>|<style[\\s\\S]*?<\/style>"
},
"ruleExplore": {
"author": "class.classBookAuthor@tag.a@text||class.rankCardAuthor@tag.a@text##^榜单第[一二三四五六七八九十\\d]+$",
"bookList": "id.bookList@class.classBookCard||id.bookRankList@class.rankCard",
"bookUrl": "class.classBookTitle@tag.a@href||class.rankCardTitle@tag.a@href",
"coverUrl": "class.classBookCover@tag.img@src||class.rankCardCover@tag.img@src",
"intro": "class.classBookDesc@text||class.rankCardDesc@text",
"kind": "class.classCoverCat@text||class.rankCoverCat@text",
"lastChapter": "class.classBookChapter@tag.a@text",
"name": "class.classBookTitle@tag.a@text||class.rankCardTitle@tag.a@text",
"wordCount": "@js:(function(){var t='';try{var e=result;var x=e.select('p.classBookMeta');if(x.size()===0)x=e.select('p.rankCardMeta');if(x.size()>0)t=String(x.get(0).text());}catch(err){}var m=t.match(\/·\\s*([^\\s]+)\\s*$\/);return m?m[1]:'';})()"
},
"ruleSearch": {
"author": "class.classBookAuthor@tag.a@text||class.rankCardAuthor@tag.a@text##^榜单第[一二三四五六七八九十\\d]+$",
"bookList": "id.bookList@class.classBookCard||id.bookRankList@class.rankCard",
"bookUrl": "class.classBookTitle@tag.a@href||class.rankCardTitle@tag.a@href",
"coverUrl": "class.classBookCover@tag.img@src||class.rankCardCover@tag.img@src",
"intro": "class.classBookDesc@text||class.rankCardDesc@text",
"kind": "class.classCoverCat@text||class.rankCoverCat@text",
"lastChapter": "class.classBookChapter@tag.a@text",
"name": "class.classBookTitle@tag.a@text||class.rankCardTitle@tag.a@text",
"wordCount": "@js:(function(){var t='';try{var e=result;var x=e.select('p.classBookMeta');if(x.size()===0)x=e.select('p.rankCardMeta');if(x.size()>0)t=String(x.get(0).text());}catch(err){}var m=t.match(\/·\\s*([^\\s]+)\\s*$\/);return m?m[1]:'';})()"
},
"ruleToc": {
"chapterList": "id.bookIndexList@tag.li@tag.a",
"chapterName": "text##\\s*\\[[^\\]]*\\]$",
"chapterUrl": "href",
"nextTocUrl": "@js:(function(){\nvar h='';try{h=String(src||'');}catch(e){}\nif(h.indexOf('pgBtn')<0){try{h=String(result||'');}catch(e2){}}\nvar u=null;\ntry{var d=org.jsoup.Jsoup.parse(h);var a=d.select('a.pgBtn');\nfor(var i=0;i<a.size();i++){if(String(a.get(i).text()).indexOf('\\u4e0b\\u4e00\\u9875')>=0){var x=String(a.get(i).attr('href'));if(x){u=x;break;}}}\n}catch(e3){}\nif(!u){var m=h.match(\/href=\"([^\"]+)\"[^>]*>\\u4e0b\\u4e00\\u9875<\/);if(m)u=m[1];}\nreturn u||null;\n})()"
},
"searchUrl": "\/book\/bookclass.html?k={{key}}",
"weight": 0
}