📚书海阁

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
}
广告