哔哩轻小说🏷

https://www.bilinovel.com

xiao-rongmu (5176)03/19 16:17

建议登录
整理修改缝合:酷安 Wolken
灰色章节修复目录部分By叶落岚起+关耳/乃星改2021.8.3
补丁 : 神秘人
修复搜索问题
修复发现榜单没图的问题
修复章节内图片问题
新補丁: 神秘人
抓取源码中的关键字替换
更新补丁
更新补丁17/9
2023.9.27
新补丁:酷安 @吉王义昊
重新抓取源码中的关键字替换
2023.9.27
新补丁2nd:酷安 @吉王义昊
修复插图不能正常加载的问题
2023.9.30
酷安 @吉王义昊
添加登录URL
清理了无用代码
使用更易读的变量名
2023.10.1
酷安 @吉王义昊
重新抓取源码中的关键字替换
2023.10.1
酷安 @吉王义昊
在获取正文时自动拉取源码并解密进行关键字替换,一劳永逸(大概)解决问题
注意:此版本会使网络请求次数增加一倍,并一定程度上减慢加载速度
2023.10.1
酷安 @吉王义昊
增加登录URL和登录UI
启用CookieJar
去除章节名下方的URL
修正了下一页获取导致的正文加载错误
补全发现中的文库
修正部分小说目录获取错误的问题
2023.10.4
酷安 @吉王义昊
跟进源码新的加密方式
2023.10.5
酷安 @吉王义昊
跟进源码新的加密方式
2023.10.6
酷安 @吉王义昊
跟进源站网站结构改动
2023.10.7
酷安 @吉王义昊
改进了目录获取方式,现在能够处理更多意外情况
2023.10.7
酷安 @吉王义昊 @是樱椛不是樱花
发现新增标签
2023.10.9
酷安 @吉王义昊
改进了发现
2023.10.13
酷安 @吉王义昊
跟进源站结构改动
2023.10.15
酷安 @吉王义昊
修正部分小说目录获取错误的问题
2023.10.22
酷安 @吉王义昊
发现页更改为动态获取,为大家带来更多排列组合(乐
同样由于动态获取,现在可以查看标签对应的书籍数量了
小幅优化正文的获取速度
正文页可显示正确的章节名称(在加载对应正文页后目录里的错误名称会自动更正)
2023.10.23
酷安 @吉王义昊
加载详情页后会自动更改错误的书名
2023.10.25
酷安 @吉王义昊
发现页新增书架
2023.11.7
酷安 @吉王义昊
使用Cache小幅度加快连续加载时正文的加载速度
2023.11.11
酷安 @吉王义昊
解决了部分书籍目录最后一章获取链接错误的问题
2023.11.12
酷安 @吉王义昊
移除了站长的喊话
2023.11.14
酷安 @吉王义昊
修复了图片加载错误的问题
2023.11.16
酷安 @吉王义昊
解决了部分书籍获取目录失败的问题
2023.11.23
酷安 @吉王义昊
解决了未登录时无法正确加载发现页的问题
2023.11.28
酷安 @吉王义昊
wrap了一份WebCrypto API,现在搜索不用等待内置浏览器跳转了
2023.12.12
酷安 @吉王义昊
适配新版卷名
2023.12.13
酷安 @吉王义昊
适配新版卷名
2024.1.13
酷安 @吉王义昊
自动调用内置浏览器过cf盾
移除了并发率
将UA置空强制阅读使用WebView默认UA
目录下一页识别改为简繁通用
2024.1.20
酷安 @吉王义昊
实验性加入自动重试机制,大幅提高目录及多页正文加载成功率
2024.1.24
酷安 @吉王义昊
适配最新正文检测
2024.2.6
酷安 @吉王义昊
处理cf扩大化问题
解决部分小说目录加载失败的问题(《谁说从妥协开始的恋爱一定没结果》)
2024.2.14
酷安 @吉王义昊
正文重试优化
2024.3.11
酷安 @吉王义昊
适配最新正文检测
处理登录失败问题
二维码导入
{
    "bookSourceComment": "建议登录\n整理修改缝合:酷安 Wolken\n灰色章节修复目录部分By叶落岚起+关耳\/乃星改2021.8.3\n补丁 : 神秘人\n修复搜索问题\n修复发现榜单没图的问题\n修复章节内图片问题\n新補丁: 神秘人\n抓取源码中的关键字替换\n更新补丁\n更新补丁17\/9\n2023.9.27\n新补丁:酷安 @吉王义昊\n重新抓取源码中的关键字替换\n2023.9.27\n新补丁2nd:酷安 @吉王义昊\n修复插图不能正常加载的问题\n2023.9.30\n酷安 @吉王义昊\n添加登录URL\n清理了无用代码\n使用更易读的变量名\n2023.10.1\n酷安 @吉王义昊\n重新抓取源码中的关键字替换\n2023.10.1\n酷安 @吉王义昊\n在获取正文时自动拉取源码并解密进行关键字替换,一劳永逸(大概)解决问题\n注意:此版本会使网络请求次数增加一倍,并一定程度上减慢加载速度\n2023.10.1\n酷安 @吉王义昊\n增加登录URL和登录UI\n启用CookieJar\n去除章节名下方的URL\n修正了下一页获取导致的正文加载错误\n补全发现中的文库\n修正部分小说目录获取错误的问题\n2023.10.4\n酷安 @吉王义昊\n跟进源码新的加密方式\n2023.10.5\n酷安 @吉王义昊\n跟进源码新的加密方式\n2023.10.6\n酷安 @吉王义昊\n跟进源站网站结构改动\n2023.10.7\n酷安 @吉王义昊\n改进了目录获取方式,现在能够处理更多意外情况\n2023.10.7\n酷安 @吉王义昊 @是樱椛不是樱花\n发现新增标签\n2023.10.9\n酷安 @吉王义昊\n改进了发现\n2023.10.13\n酷安 @吉王义昊\n跟进源站结构改动\n2023.10.15\n酷安 @吉王义昊\n修正部分小说目录获取错误的问题\n2023.10.22\n酷安 @吉王义昊\n发现页更改为动态获取,为大家带来更多排列组合(乐\n同样由于动态获取,现在可以查看标签对应的书籍数量了\n小幅优化正文的获取速度\n正文页可显示正确的章节名称(在加载对应正文页后目录里的错误名称会自动更正)\n2023.10.23\n酷安 @吉王义昊\n加载详情页后会自动更改错误的书名\n2023.10.25\n酷安 @吉王义昊\n发现页新增书架\n2023.11.7\n酷安 @吉王义昊\n使用Cache小幅度加快连续加载时正文的加载速度\n2023.11.11\n酷安 @吉王义昊\n解决了部分书籍目录最后一章获取链接错误的问题\n2023.11.12\n酷安 @吉王义昊\n移除了站长的喊话\n2023.11.14\n酷安 @吉王义昊\n修复了图片加载错误的问题\n2023.11.16\n酷安 @吉王义昊\n解决了部分书籍获取目录失败的问题\n2023.11.23\n酷安 @吉王义昊\n解决了未登录时无法正确加载发现页的问题\n2023.11.28\n酷安 @吉王义昊\nwrap了一份WebCrypto API,现在搜索不用等待内置浏览器跳转了\n2023.12.12\n酷安 @吉王义昊\n适配新版卷名\n2023.12.13\n酷安 @吉王义昊\n适配新版卷名\n2024.1.13\n酷安 @吉王义昊\n自动调用内置浏览器过cf盾\n移除了并发率\n将UA置空强制阅读使用WebView默认UA\n目录下一页识别改为简繁通用\n2024.1.20\n酷安 @吉王义昊\n实验性加入自动重试机制,大幅提高目录及多页正文加载成功率\n2024.1.24\n酷安 @吉王义昊\n适配最新正文检测\n2024.2.6\n酷安 @吉王义昊\n处理cf扩大化问题\n解决部分小说目录加载失败的问题(《谁说从妥协开始的恋爱一定没结果》)\n2024.2.14\n酷安 @吉王义昊\n正文重试优化\n2024.3.11\n酷安 @吉王义昊\n适配最新正文检测\n处理登录失败问题",
    "bookSourceGroup": "轻小说",
    "bookSourceName": "哔哩轻小说🏷",
    "bookSourceType": 0,
    "bookSourceUrl": "https:\/\/www.bilinovel.com",
    "bookUrlPattern": "",
    "concurrentRate": "",
    "coverDecodeJs": "",
    "customOrder": 0,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "exploreUrl": "@js:\nres = []\n\n\/\/书架\nuser = ajax(source.bookSourceUrl + \"\/user.php\")\n\/\/java.toast(user)\ntry {\nif (user.match(\/<title>(登录|错误).+哔哩轻小说<\\\/title>\/gi)) {\n  \/\/未登录\n  res.push(\n    {\n      title: `>> 我的书架 | 未登录 <<`,\n      url: '',\n      style: { layout_flexGrow: 1, layout_flexBasisPercent: 1 }\n    })\n} else {\n  \/\/已登录\n  res.push(\n    {\n      title: `>> 我的书架 | ${user.match(\/<span class=\"user-name\">.+<\\\/span>\/gi)[0].replace(\/<\\\/?span.*?>\/gi,'')} <<`,\n      url: '',\n      style: { layout_flexGrow: 1, layout_flexBasisPercent: 1 }\n    })\n  bookcase = ajax(source.bookSourceUrl + \"\/bookcase.php\")\n  bookcase.match(\/<select[\\s\\S]+?<\\\/select>\/gi)[0].match(\/<option.+<\\\/option>\/gi).forEach(option => {\n    res.push(\n      {\n        title: option.match(\/>.+(?=<)\/gi)[0].replace('>', ''),\n        url: source.bookSourceUrl + \"\/bookcase.php?classid=\" + option.match(\/value=\\\".+?(?=\\\")\/gi)[0].replace(\/(value=\\\")\/gi, ''),\n        style: { layout_flexGrow: 1, layout_flexBasisPercent: 0.25 }\n      })\n  })\n}\n} catch (e) {\n  throw(\"书架加载失败:\\n\"+e+\"\\n登录页源码:\\n\"+user)\n}\n\ncontent = ajax(source.bookSourceUrl + \"\/wenku\/\")\ncontent.match(\/排序方式[\\s\\S]+?<\\\/div>\/gi)[0].match(\/<a.+<\\\/a>\/gi).forEach(a => {\n  let sortTitle = a.match(\/>.+(?=<)\/gi)[0].replace('>', '')\n  let sortAddress = a.match(\/\\\/.+?(?=_)\/gi)[0].replace('\/', '')\n  content.match(\/作品分类[\\s\\S]+?<\\\/div>\/gi)[0].match(\/<a.+<\\\/a>\/gi).forEach((v, i) => {\n    if (i == 0) {\n      res.push(\n        {\n          title: `>> 全部文库 | ${sortTitle} <<`,\n          url: v.match(\/href=\\\".+?(?=\\\")\/gi)[0].replace(\/(href=\\\")\/gi, '')\n            .replace(\/\\\/.+?(?=_)\/gi, '\/' + sortAddress).replace('1_0.html', '{{page}}_0.html'),\n          style: { layout_flexGrow: 1, layout_flexBasisPercent: 1 }\n        })\n    } else {\n      res.push(\n        {\n          title: v.match(\/>.+(?=<)\/gi)[0].replace('>', ''),\n          url: v.match(\/href=\\\".+?(?=\\\")\/gi)[0].replace(\/(href=\\\")\/gi, '')\n            .replace(\/\\\/.+?(?=_)\/gi, '\/' + sortAddress).replace('1_0.html', '{{page}}_0.html'),\n          style: { layout_flexGrow: 1, layout_flexBasisPercent: 0.25 }\n        })\n    }\n  })\n})\ncontent.match(\/排序方式[\\s\\S]+?重置\/gi)[0].match(\/<li[\\s\\S]+?<\\\/li>\/gi).forEach(li => {\n  let sortTitle = li.match(\/>.+(?=<\\\/h3>)\/gi)[0].replace('>', '')\n  res.push(\n    {\n      title: `>> ${sortTitle} <<`,\n      url: '',\n      style: { layout_flexGrow: 1, layout_flexBasisPercent: 1 }\n    })\n  li.match(\/<a.+<\\\/a>\/gi).forEach((v, i) => {\n    if (i != 0) {\n      res.push(\n        {\n          title: v.match(\/>.+(?=<)\/gi)[0].replace('>', ''),\n          url: v.match(\/href=\\\".+?(?=\\\")\/gi)[0].replace(\/(href=\\\")\/gi, '').replace('1_0.html', '{{page}}_0.html'),\n          style: { layout_flexGrow: 1, layout_flexBasisPercent: 0.25 }\n        })\n    }\n  })\n})\ntagContent = ajax(source.bookSourceUrl + \"\/taglist\/1.html\")\nres.push(\n  {\n    title: '>> 标签分类 <<',\n    url: '',\n    style: { layout_flexGrow: 1, layout_flexBasisPercent: 1 }\n  })\ntry {\ntagContent.match(\/标签分类<\\\/h3>[\\s\\S]+?重置\/gi)[0].match(\/<a.+<\\\/a>\/gi).forEach((v, i) => {\n  res.push(\n    {\n      title: v.match(\/>.+(?=<)\/gi)[0].replace('>', ''),\n      url: v.match(\/href=\\\".+?(?=\\\")\/gi)[0].replace(\/(href=\\\")\/gi, '').replace('1.html', '{{page}}.html'),\n      style: { layout_flexGrow: 1, layout_flexBasisPercent: 0.25 }\n    })\n})\n} catch (e) {\n  throw(\"标签页解析错误:\"+e+\"\\n标签页源码:\\n\"+tagContent)\n}\nJSON.stringify(res)\n\/\/throw(JSON.stringify(res))",
    "header": "{\n\"Referer\": \"https:\/\/www.bilinovel.com\",\n\"User-Agent\":\"\",\n\"Accept-Language\":\"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n\"Accept-Encoding\":\"gzip,deflate,br,zstd\",\n\"Accept\":\"*\/*\"\n}",
    "jsLib": "function errorReg() {\n  return \/(java.net.+Exception)|(okhttp.+Exception)|(error code: 1015)|(503 Service Temporarily Unavailable)|(Parse error.+in.+wwwroot.+php)|(_cf_chl_opt|challenges.css)|(<center.+>.+不支持)|(章节内容不支持该浏览器显示)\/gi\n}\nfunction ajax(url) {\n  const { java, cookie } = this;\n  let content = \"\";\n  let time=1;\n  \tcontent = java.ajax(url);\n  \twhile (String(content).match(errorReg())) {\n    if (time>10) {\n  \t    java.toast(\"重试10次后仍请求失败:\"+url)\n  \t    throw(\"重试10次后仍请求失败:\"+url+content)\n  \t    break;\n    \t}\n    \tif(!!String(content).match(\/不支持\/gi)) {\n      \/\/java.log(cookie.getCookie(url));\n      cookie.replaceCookie(url,java.webView(null,url,\"document.cookie\"));\n    \t}\n    \tif (!!String(content).match(\/_cf_chl_opt|challenges.css\/gi)) {\n    \t\t i = 1;\n      \twhile (!!String(content).match(\/_cf_chl_opt|challenges.css\/gi)) {\n\t       java.log('盾');\n\t       java.log(content);\n        if (i <= 1) {\n          java.toast(\"哦呼,五秒盾,正在尝试静默破盾ing……\");\n          content = java.webView(null,url,null);\n        } else {\n          java.toast(\"啊哦,静默破盾好像不管用,试试手动过校验吧!\");\n          content = java.startBrowserAwait(url,\"加载完毕后点完成,此页面可能会弹出多次\").body();\n        }\n        i++;\n      }\n      continue;\n    }\n  \t\t java.log(\"请求失败:\"+url)\n  \t\t java.log(\"重试\"+time+\"次\")\n  \t\t let t=new Date().getTime()\n    while (new Date().getTime() - t < 500) { }\n    if (String(content).match(\/1015|503|php\/gi)) {\n    \t  while (new Date().getTime() - t < 5000) { }\n    \t}\n  \t\t content = java.ajax(url);\n  \t\t time++;\n  \t}\n  \treturn String(content);\n}",
    "lastUpdateTime": 1710337625074,
    "loginUi": "[\n  {\n    \"name\": \"账号\",\n    \"type\": \"text\"\n  },\n  {\n    \"name\": \"密码\",\n    \"type\": \"password\"\n  }\n]",
    "loginUrl": "@js:\nfunction login() {\n  let une = source.getLoginInfoMap().get(\"账号\")\n  let pwd = source.getLoginInfoMap().get(\"密码\")\n  if (une && pwd) {\n    let body = String('username=' + une + '&password=' + pwd + '&usecookie=86400&act=login')\n    let url = source.bookSourceUrl + '\/login.php?do=submit'\n    let res = java.post(url, body, {\n      \"Content-Type\": \"application\/x-www-form-urlencoded\",\n      \"Cookie\": java.webView(null,url,\"document.cookie\")\n    })\n    let ck = res.cookies()\n    if (res.body().match(\/错误\/gi)) {\n      throw(res.body().match(\/<div class=\"aui-ver-form\">[\\s\\S]+<br>\/gi)[0].replace(\/<.+>\\s*\/gi,\"\"))\n    }\n    let header = JSON.stringify({\n      \"Cookie\": String(ck).match(\/\\{(.*?)\\}\/)[1].replace(\/,\/g, ';')\n    })\n    source.putLoginHeader(header)\n  }\n}",
    "respondTime": 180000,
    "ruleBookInfo": {
        "author": "[property=\"og:novel:author\"]@content",
        "canReName": "1",
        "coverUrl": "[property=\"og:image\"]@content",
        "intro": "id.bookSummary@tag.content@textNodes\n@js:\nresult=\"  \"+result;",
        "kind": "class.book-cell@tag.p.1@ownText&&class.tag-small red@text\n##.*万字|·.*",
        "lastChapter": "class.gray ell@text##(\\d+-\\d+-\\d+\\s\\d+:\\d+)·(.*)##$2 • $1",
        "name": "[property=\"og:novel:book_name\"]@content",
        "tocUrl": "class.btn-normal red@href",
        "wordCount": "class.book-cell@tag.p.1@ownText##连载|完结"
    },
    "ruleContent": {
        "content": "@js:\nif (String(src).match(errorReg())) {\n  java.log(src)\n  src=ajax(baseUrl);\n}\njava.setContent(src)\nif (java.get('jsContent') == '' || java.get('id') == '') {\n  jsLink = java.getString(\"tag.script@src\").match(\/http.+zhmb.+\\?v.+\/gi)\n  try {\n    jsLink.forEach(link => {\n      jsRaw = java.cacheFile(link)\n      jsContent = jsRaw.match(\/.+\\\\x.+\/gi)\n      if (jsContent) {\n        java.put('id', jsRaw.match(\/contentid: '.+(?=',)\/gi)[0].replace(\"contentid: '\", ''))\n        java.put('jsContent', jsContent[0])\n      }\n    \t})\n  \t} catch(e) {\n  \t\t throw(\"正文获取js错误:\\n\"+e+\"\\n正文源码:\\n\"+src)\n  \t}\n  \/\/java.ajaxAll(jsLink).forEach(res => {\n  \/\/  jsRaw = res.body()\n  \/\/})\n}\ntry {\n  h = String(java.getString(\"id.\" + java.get('id') + \"@html\"))\n  h = h.replace(\"&nbsp;&nbsp;\", \"&emsp;\")\n  el = { innerHTML: String(h) }\n  document = { getElementById: () => { return el } }\n  window = { document: document, RegExp: RegExp }\n  eval(String(java.get('jsContent')))\n} catch(e) {\n  java.log(src)\n  throw(\"js 执行错误:\"+e+\"\\njs 内容;\\n\"+jsContent)\n}\nh = el.innerHTML\nh",
        "imageDecode": "",
        "imageStyle": "FULL",
        "nextContentUrl": "##url_next:'([^']*)'##$1###\n@js:\n\/\/121_2.html这样的是下一页,纯数字则是下一章\n\/\/带有catalog是详情页\njava.log(\"url: \"+result)\nif (result==\"\") java.log(src)\nvar isNew=\/(\\\/(\\d+).html)|catalog\/.test(result);\nvar out=isNew?'':result;\nout",
        "payAction": "@js:\nbaseUrl",
        "replaceRegex": "##((?<=[\\u4e00-\\u9fa5“‘「(,])\\s+)?<!--\\s*\\(继续下一页\\)\\s*-->\\s*|((?<=[\\u4e00-\\u9fa5“‘「(,])\\s+)?\\(本章未完\\)\\s*|.+tmygod.+\\n",
        "title": "id.atitle@text"
    },
    "ruleExplore": {
        "author": "class.book-author@ownText",
        "bookList": "@js:\ni = 1;\n\nif (String(src).match(errorReg())) {\n  src=ajax(baseUrl);\n}\njava.setContent(src)\nresult = java.getElement(\"class.book-ol@tag.li\");\nresult;",
        "bookUrl": "a@href",
        "coverUrl": "img@data-src",
        "intro": "class.book-desc@text&&class.ell@text",
        "kind": "class.tag-small-group origin-right@tag.em.0@text&&\nclass.tag-small-group origin-right@tag.em.1@text&&\ntag.time@text\n@js:\nres=[]\nresult.forEach(item=>{\n    item.split(new RegExp(\"[ \\\/]\",\"gi\")).forEach(i=>res.push(i))\n})\nres",
        "name": "class.book-li@tag.img@alt",
        "wordCount": "class.tag-small blue@text"
    },
    "ruleSearch": {
        "author": "class.book-author@textNodes",
        "bookList": "@js:\njava.log(cookie.getCookie(baseUrl))\nif (String(result).match(errorReg())&&!result.includes(\"somework\")) {\n  result=ajax(baseUrl);\n}\nif (result.includes(\"no-js\")) {\n  java.log(result)\n  jsContent = java.cacheFile(java.getString(\"tag.script@src\").match(\/http.+somework.+\\?v.+\/gi)[0])\n  window = {\n    a: result.match(\/window.a=\\'.+\\'\/gi)[0].replace(\/window.a=|\\'\/gi, ''),\n    b: result.match(\/window.b=\\'.+\\'\/gi)[0].replace(\/window.b=|\\'\/gi, ''),\n    c: result.match(\/window.c=\\'.+\\'\/gi)[0].replace(\/window.c=|\\'\/gi, ''),\n    crypto: {\n      subtle: {\n        importKey(format, keyData, algorithm, extractable, keyUsages) {\n          return {\n            then(func) { func(keyData) }\n          }\n        },\n        decrypt(algorithm, key, data) {\n          cipher = java.createSymmetricCrypto(\"AES\/CTR\/NoPadding\", key, algorithm.counter)\n          return {\n            then: (func) => { func(cipher.decryptStr(data)) }\n          }\n        }\n      }\n    }\n  }\n  setTimeout = () => { }\n  function TextDecoder() { }\n  TextDecoder.prototype.decode = bytes => bytes\n  document = { cookie: \"\" }\n  java.log(jsContent)\n  funcName=String(jsContent).match(\/^function.+\\(\/gi)[0].replace(\/function| |\\(\/gi,'')\n  \tjava.log(funcName)\n  eval(funcName + ' = str => java.base64DecodeToByteArray(str)')\n  eval(String(jsContent)\n    .replace(\/^function.+\\(\/gi, 'function ('))\n  java.log(document.cookie)\n  cookie.replaceCookie(baseUrl, document.cookie)\n  do {\n    t = new Date().getTime()\n    while (new Date().getTime() - t < 5000) { }\n    java.setContent(result = ajax(baseUrl + \",\"\n      + JSON.stringify({\n        headers: {\n          Cookie: cookie.getCookie(baseUrl)\n        }\n      })))\n    java.log(result)\n  } while (result.includes(\"no-js\"))\n}\njava.getElement(\"class.book-ol book-ol-normal@tag.li\")",
        "bookUrl": "tag.a.0@href",
        "checkKeyWord": "我的青春恋爱喜剧",
        "coverUrl": "a@href@js:\nvar id = result.match(\/\\\/(\\d+)\\.html\/)[1];\n'https:\/\/www.linovelib.com\/files\/article\/image\/'+parseInt(id\/1000)+'\/'+id+'\/'+id+'s.jpg';",
        "intro": "class.book-desc@text",
        "kind": "class.tag-small-group origin-right@tag.em@text\n@js:\nres=[]\nresult.forEach(item=>{\n    item.split(new RegExp(\"[ \\\/]\",\"gi\")).forEach(i=>res.push(i))\n})\nres",
        "name": "class.book-title-x@class.book-title@text"
    },
    "ruleToc": {
        "chapterList": "id.catelogX@class.chapter-li\n@js:\n    \/\/现实debug(尝试修复正文链接问题,和目录不全)\n    \/\/《好友角色的我怎么可能大受欢迎》第三卷12\n    \/\/《我的青春恋爱喜剧》\n    \/\/2022-8-19\n    \/\/原来的代码在源注释(已移除)\n    \/\/2022-8-20修复https:\/\/w.linovelib.com\/novel\/2765.html目录加载失败\n    \/\/2023-9-30使用易于理解的变量命名\n    \/\/2023-10-7处理cid(1)以及连续多个cid(0)\n    \/\/2023-11-11解决了一个原来手滑写出的bug\n    \/\/2023-11-16处理连续多个卷名\n    \/\/2023-12-12适配新版卷名\n    \/\/2024-2-6处理《谁说从妥协开始的恋爱一定没结果》\n\nres = result\n\/\/java.log(res)\n\nfor (i = 0; i < res.length; i++) {\n    java.setContent(res[i])\n    if (java.getString(\"tag.a@href\").match(\/javascript:cid\\(.+\\)\/gi)) {\n        if (String(res[(i == res.length - 1?i:i+1)]).match(\/javascript:cid\\(.+\\)\/gi)) {\n            java.setContent(res[i - 1])\n            prevLink = java.getString(\"tag.a@href\")\n            if (prevLink == \"\") {\n                java.setContent(res[i - 2])\n                prevLink = java.getString(\"tag.a@href\")\n            }\n            content = ajax(source.bookSourceUrl + prevLink)\n            java.setContent(content)\n            foot = java.getElements(\"id.footlink\")\n            path = prevLink\n\n            \/\/java.log(foot)\n            while (String(foot).match(\/下一页|下一頁\/gi)) {\n            \t    \/\/java.log(foot)\n                str = content.match(\/<script type\\=\\\"text\\\/javascript\\\">var ReadParams.*\/)\n                path = String(str).match(\/url_next\\:'.*?html\/)[0].replace(\"url_next:'\", \"\")\n                content = java.ajax(\"https:\/\/w.linovelib.com\" + path)\n                java.setContent(content)\n                foot = java.getElements(\"id.footlink\")\n            }\n\n            next = ajax(source.bookSourceUrl + path)\n            str = next.match(\/<script type\\=\\\"text\\\/javascript\\\">var ReadParams.*\/)\n            path = String(str).match(\/url_next\\:'.*?html\/)[0].replace(\"url_next:'\", \"\")\n            java.log('l:'+path)\n            res[i] = String(res[i]).replace(\/javascript:cid\\(.+\\)\/gi, path)\n        } else {\n            nextLink = \"\"\n            for (var j=1;nextLink==\"\";j++) {\n                java.setContent(res[i + j])\n                nextLink = java.getString(\"tag.a@href\")\n            }\n            next = ajax(source.bookSourceUrl + nextLink)\n            str = next.match(\/<script type\\=\\\"text\\\/javascript\\\">var ReadParams.*\/)\n            try {\n              path = String(str).match(\/url_previous\\:'.*?html\/)[0].replace(\"url_previous:'\", \"\")\n            } catch(e) {\n            \t  java.toast(String(next)+\"\\n\")\n            \t  java.log(next)\n            \t  throw(\"目录解析报错开始:\\n\"+String(next)+\"\\n结束\")\n            \t}\n            \/\/java.log(path)\n\n            res[i] = String(res[i]).replace(\/javascript:cid\\(.+\\)\/gi, path)\n        }\n    }\n\n    \/\/java.log(res[i])\n}\nres",
        "chapterName": "text",
        "chapterUrl": "@js:\n\/\/只有不为卷名时返回URL,避免阅读自动合并\njava.getString(\"class.chapter-bar@text\")!=java.getString(\"text\") ? java.getString(\"tag.a@href\") : \"\"",
        "isVolume": "@js:\njava.getString(\"class.chapter-bar@text\")==java.getString(\"text\")",
        "updateTime": ""
    },
    "searchUrl": "<js>\npage == 1 ?\n  \"\/search.html?searchkey={{key}}&searchtype=all\"\n  :\n  '\/search\/{{key}}_{{page}}.html'\n<\/js>",
    "weight": 0
}
站长推荐
广告