Fuck BD Wenku

Fuck Baidu Wenku!

  1. // ==UserScript==
  2. // @name Fuck BD Wenku
  3. // @license MIT
  4. // @namespace zam157.bdwenkufukker
  5. // @version 0.2
  6. // @run-at document-start
  7. // @description Fuck Baidu Wenku!
  8. // @author Zam157
  9. // @match https://wenku.baidu.com/view/*
  10. // @icon https://www.google.com/s2/favicons?sz=64&domain=baidu.com
  11. // @grant none
  12. // ==/UserScript==
  13.  
  14. (function () {
  15. 'use strict'
  16.  
  17. const docDatas = new Map()
  18. window.getDocContent = () => Array.from(docDatas)
  19. .sort((a, b) => a[0] - b[0])
  20. .map(item => item[1].body)
  21. .flat()
  22. .filter(item => item?.t === 'word')
  23. .map((item) => {
  24. if (item?.ps?._enter)
  25. return `${item.c}\n`
  26. return item.c
  27. })
  28. .join('')
  29.  
  30. Array.from({ length: 1000 }).forEach((_, i) => {
  31. const page = i + 1
  32. let injectFn
  33. Object.defineProperty(window, `wenku_${page}`, {
  34. set(fn) {
  35. if (fn) {
  36. injectFn = function (...arg) {
  37. arg[0] && docDatas.set(page, arg[0])
  38.  
  39. return fn(...arg)
  40. }
  41. }
  42. else {
  43. injectFn = undefined
  44. }
  45. },
  46. get() {
  47. if (injectFn)
  48. return injectFn
  49.  
  50. return undefined
  51. },
  52. })
  53. })
  54.  
  55. // 监听路由变化
  56. function injectHisory(type) {
  57. const orig = history[type]
  58. history[type] = function (...arg) {
  59. const rv = orig.apply(this, arg)
  60. const e = new CustomEvent('historyChange', {
  61. detail: {
  62. params: arg,
  63. },
  64. })
  65. window.dispatchEvent(e)
  66. return rv
  67. }
  68. }
  69. ['pushState', 'replaceState', 'go', 'back', 'forward'].forEach(type => injectHisory(type))
  70.  
  71. // 路由变化时清空docDatas
  72. window.addEventListener('popstate', (event) => {
  73. const e = new CustomEvent('historyChange', {
  74. detail: { event },
  75. })
  76. window.dispatchEvent(e)
  77. })
  78. window.addEventListener('historyChange', () => docDatas.clear())
  79.  
  80. // 破解VIP功能
  81. let _pageData
  82. Object.defineProperty(window, 'pageData', {
  83. set(newVal) {
  84. _pageData = newVal
  85. },
  86. get() {
  87. if (_pageData?.vipInfo?.isVip === false) {
  88. _pageData.vipInfo.isWenkuVip = 1
  89. _pageData.vipInfo.isVip = 1
  90. _pageData.vipInfo.isSuperVip = 1
  91. _pageData.vipInfo.leftDay = 999
  92. _pageData.readerInfo.interceptPage = _pageData.readerInfo.page
  93. _pageData.readerInfo.goOnReadAction = 1
  94. _pageData.readerInfo.copyUnlimited = 1
  95. _pageData.readerInfo.showPage = _pageData.readerInfo.page
  96. _pageData.mixVipAndUserInfo.userInfo.isAdmin = 1
  97. }
  98. return _pageData
  99. },
  100. })
  101. })()

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址