{
"bookSourceComment": "\/\/无名25.05.01修\n\/\/25.05.02用电脑ua解决搜索下一页,验证成功跳转后请重新搜索",
"bookSourceGroup": "源社区",
"bookSourceName": "篱笆好文学",
"bookSourceType": 0,
"bookSourceUrl": "https:\/\/www.libahao.com\/",
"bookUrlPattern": "",
"concurrentRate": "",
"coverDecodeJs": "",
"customOrder": 3,
"enabled": true,
"enabledCookieJar": true,
"enabledExplore": true,
"exploreUrl": "",
"header": "{\"User-Agent\": \"Mozilla\/5.0 (Linux; Android 14; 2312DRAADC) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/132.0.0.0 Mobile Safari\/537.36\"}",
"lastUpdateTime": "1746180515869",
"loginCheckJs": "",
"respondTime": 180000,
"ruleBookInfo": {
"author": "[property=\"og:novel:author\"]@content",
"coverUrl": "img@src",
"intro": "[property=\"og:description\"]@content",
"kind": "[property~=category|status|update_time]@content",
"lastChapter": "[property~=las?test_chapter_name]@content",
"name": "[property=\"og:novel:book_name\"]@content",
"tocUrl": ""
},
"ruleContent": {
"content": ".chapter-content@html",
"nextContentUrl": "text.下一页@href"
},
"ruleExplore": {
"author": "",
"bookList": "",
"bookUrl": "",
"coverUrl": "",
"intro": "",
"name": ""
},
"ruleSearch": {
"author": "$.author",
"bookList": "<js>\nif(result.match(\/百度安全验证\/)){\n\txb=(baseUrl)+\",\"+JSON.stringify({\n\t\t\"headers\":{\n\t\t\t\"User-Agent\": \"Mozilla\/5.0 (X11; Linux x86 64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/127.0.0.0 Safari\/537.36\"\n}})\njava.startBrowserAwait(xb,\"验证\")\nresult=java.ajax(xb)\n\t}\n\nvar bookList = [];\nvar finalJsonOutput = null;\ntry {\n var doc = result;\n if (!doc) {\n throw new Error(\"无法解析 HTML\");\n }\n var containers = org.jsoup.Jsoup.parse(doc).select(\"div.c-container.result-op, div.c-container.result\");\n java.log(\"找到 \" + containers.size() + \" 个\");\n for (var i = 0; i < containers.size(); i++) {\n var container = containers.get(i);\n var book = {};\n if (container.hasClass(\"result-op\")) { \n java.log(\"处理第 \" + (i + 1) + \" 个 (result-op)\"); \n book.bookUrl = container.attr(\"mu\") || null; \n var nameElement = container.selectFirst(\"a\");\n if (nameElement) {\n var nameText = nameElement.text().trim();\n book.name = (nameText) ? nameText : \"未找到\";\n if (!nameText) {\n \/\/java.log(\"未找到书名,a 标签内容: \" + nameElement.outerHtml());\n }\n } else {\n book.name = \"未找到\";\n \/\/java.log(\"未找到书名对应的 a 标签\");\n } \n var authorElement = container.selectFirst(\"span\");\n if (authorElement) {\n var authorText = authorElement.text().trim();\n var prefix = \"作者: \"; \n if (authorText.includes(prefix)) {\n book.author = authorText.substring(prefix.length).trim();\n } else {\n book.author = \"未找到\";\n \/\/java.log(\"作者信息未找到或格式不符: \" + authorElement.outerHtml());\n }\n } else {\n book.author = \"未找到\";\n \/\/java.log(\"未找到作者对应的 span 标签\");\n } \n var introElement = container.selectFirst(\"div.text_2NOr6\");\n var introText = null;\n if (introElement) {\n introText = introElement.text().trim();\n book.intro = introText; \n book.kind = null; \n if (!introText.startsWith(\"简介:\")) {\n var kindPrefix = \"类别:\";\n var kindIndex = introText.indexOf(kindPrefix);\n if (kindIndex !== -1) {\n var kindTemp = introText.substring(kindIndex + kindPrefix.length).trim();\n var chapterPrefix = \"最新章节\"; \n var chapterIndex = kindTemp.indexOf(chapterPrefix);\n if (chapterIndex !== -1) {\n book.kind = kindTemp.substring(0, chapterIndex).trim(); \n } else {\n book.kind = kindTemp; \n }\n } else {\n \/\/java.log(\"未在 intro 文本中找到 '类别:' 用于提取 kind: \" + introText);\n }\n } else {\n \/\/java.log(\"intro 文本以 '简介:' 开头,kind 设为 null\");\n }\n } else {\n book.intro = null; \n book.kind = null;\n \/\/java.log(\"未找到 intro\/kind 对应的 div.text_2NOr6 标签\");\n } \n var allAElements = container.select(\"a\");\n if (allAElements.size() >= 2) {\n book.lastChapter = allAElements.get(allAElements.size() - 2).text().trim();\n } else {\n book.lastChapter = null; \n \/\/java.log(\"a 标签数量不足,无法提取倒数第二个作为 lastChapter\");\n }\n } else if (container.hasClass(\"result\")) { \n java.log(\"处理第 \" + (i + 1) + \" (result)\"); \n book.bookUrl = container.attr(\"mu\") || null; \n var nameElement = container.selectFirst(\"a\");\n if (nameElement) {\n var nameText = nameElement.text().trim();\n book.name = (nameText) ? nameText : \"未找到\";\n if (!nameText) {\n \/\/java.log(\"未找到书名,a 标签内容: \" + nameElement.outerHtml());\n }\n } else {\n book.name = \"未找到\";\n \/\/java.log(\"未找到书名对应的 a 标签\");\n } \n var contentRightElement = container.selectFirst(\".content-right_1THTn\");\n if (contentRightElement) {\n var fullText = contentRightElement.text().trim();\n book.intro = fullText; \n book.author = null; \n var authorPrefix = \"作者:\"; \n var authorIndex = fullText.indexOf(authorPrefix);\n var kindSeparator = \"类别\"; \n var kindIndexForAuthor = fullText.indexOf(kindSeparator);\n if (authorIndex !== -1) { \n var startIndex = authorIndex + authorPrefix.length;\n var endIndex = (kindIndexForAuthor !== -1 && kindIndexForAuthor > authorIndex) ? kindIndexForAuthor : fullText.length;\n book.author = fullText.substring(startIndex, endIndex).trim();\n } else {\n \/\/java.log(\"未在 .content-right_1THTn 中找到 '作者:'\");\n } \n book.kind = null; \n var kindPrefix = \"类别:\"; \n var kindIndex = fullText.indexOf(kindPrefix);\n var chapterSeparator = \"最新章节\"; \n var chapterIndexForKind = fullText.indexOf(chapterSeparator);\n if (kindIndex !== -1) { \n var startIndex = kindIndex + kindPrefix.length;\n var endIndex = (chapterIndexForKind !== -1 && chapterIndexForKind > kindIndex) ? chapterIndexForKind : fullText.length;\n book.kind = fullText.substring(startIndex, endIndex).trim();\n } else {\n \/\/java.log(\"未在 .content-right_1THTn 中找到 '类别:'\");\n } \n book.lastChapter = null; \n var chapterPrefix = \"最新章节:\"; \n var chapterIndex = fullText.indexOf(chapterPrefix);\n var updateSeparator = \"最新更新\"; \n var updateIndex = fullText.indexOf(updateSeparator);\n\n if (chapterIndex !== -1) { \n var startIndex = chapterIndex + chapterPrefix.length;\n var endIndex = (updateIndex !== -1 && updateIndex > chapterIndex) ? updateIndex : fullText.length;\n book.lastChapter = fullText.substring(startIndex, endIndex).trim();\n } else {\n \/\/java.log(\"未在 .content-right_1THTn 中找到 '最新章节:'\");\n }\n } else { \n book.author = null;\n book.kind = null;\n book.lastChapter = null;\n book.intro = null;\n \/\/java.log(\"未找到 .content-right_1THTn 元素\");\n }\n } else {\n \/\/java.log(\"跳过未知类型的容器: \" + container.outerHtml().substring(0, 100));\n continue; \n } \n bookList.push(book);\n }\n var finalResult = {\n bookList: bookList \n };\n finalJsonOutput = JSON.stringify(finalResult);\n} catch (e) {\n java.log(\"错误: \" + e);\n finalJsonOutput = JSON.stringify({\n bookList: []\n }); \n}\nresult = finalJsonOutput;\n<\/js>\n$.bookList",
"bookUrl": "$.bookUrl@js:result+',{webView:“true”}'",
"checkKeyWord": "斗破苍穹",
"coverUrl": "",
"intro": "$.intro",
"kind": "$.kind",
"lastChapter": "$.liastChapter",
"name": "$.name",
"wordCount": ""
},
"ruleToc": {
"chapterList": ".chapter-list.1@li",
"chapterName": "a@text",
"chapterUrl": "a@href@js:result = \"https:\/\/m.libahao.com\" + result"
},
"searchUrl": "https:\/\/www.baidu.com\/s?wd=site%3Awww.libahao.com + %20{{key}}&pn={{(page - 1) * 10}},{\n \"headers\": {\"User-Agent\": \"Mozilla\/5.0 (X11; Linux x86 64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/127.0.0.0 Safari\/537.36\"},\n \"webView\": true\n}",
"variableComment": "",
"weight": 0
}