tansuo 发表于 2023-10-29 11:29:30

李恒道 发表于 2023-10-29 03:02
只接受第一个middaren导致的
你应该用错库了
跟我上边说的第一个问题貌似是一个原理


大神,库应该没错,我是研究这个脚本代码https://greasyfork.org/scripts/450169-weread-scraper/code/WeRead%20Scraper.user.js 里面就使用这两个库,但原理一直不明白,所以在论坛发了两个帖子来了解这两个库,头一个帖子,虽然运行没问题,但打印是什么内容不明白,而那个脚本确可以打印存储canvas上的内容,求大神继续指导

李恒道 发表于 2023-10-29 11:59:00

tansuo 发表于 2023-10-29 11:29
大神,库应该没错,我是研究这个脚本代码https://greasyfork.org/scripts/450169-weread-scraper/code/We ...

这个已经被删除了

tansuo 发表于 2023-10-29 12:26:33

李恒道 发表于 2023-10-29 11:59
这个已经被删除了

不要在有油猴的浏览器打开,它会下载一个js,另外大神加我QQ2448640323,我发给你😊

tansuo 发表于 2023-10-29 17:24:44

李恒道 发表于 2023-10-29 11:59
这个已经被删除了


大神下面是脚本代码 报如下错误Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'createStore')
// ==UserScript==
// @name         WeRead Scraper1
// @namespace    https://github.com/Sec-ant/weread-scraper
// @version      1.4.1
// @author       Ze-Zheng Wu
// @descriptionScrape WeRead books and save them as HTML files
// @license      MIT
// @match      https://weread.qq.com/web/reader/*
// @match      https://weread.qq.com/web/book/read*
// @require      https://fastly.jsdelivr.net/npm/zustand@4.4.1/umd/vanilla.production.js
// @require      https://fastly.jsdelivr.net/npm/zustand@4.4.1/umd/middleware.production.js
// @run-at       document-start
// ==/UserScript==
(function () {
const scraperSessionInitialState = {
    scraping: false,
    chapterLevelList: {}
};

const scraperSessionStore = this.zustandVanilla.createStore()(
    middleware.subscribeWithSelector(
      middleware.persist(() => scraperSessionInitialState, {
      name: "scraper-session-storage",
      storage: middleware.createJSONStorage(() => sessionStorage)
      })
    )
);
console.log(scraperSessionStore.getState().scraping);
console.log(scraperSessionStore.getState().chapterLevelList);
})();

李恒道 发表于 2023-10-29 17:55:02

tansuo 发表于 2023-10-29 17:24
大神下面是脚本代码 报如下错误Uncaught (in promise) TypeError: Cannot read properties of undefined ...
删除iffe闭包函数
善用debugger调试

iffe会创建this作为新作用域
而umd设置的是tampermonkey的this作用域

标准的混淆作用域问题
出现这种情况应该考虑补基础了...



// ==UserScript==
// @name         WeRead Scraper1
// @namespace    https://github.com/Sec-ant/weread-scraper
// @version      1.4.1
// @author       Ze-Zheng Wu
// @descriptionScrape WeRead books and save them as HTML files
// @license      MIT
// @match      https://weread.qq.com/web/reader/*
// @match      https://weread.qq.com/web/book/read*
// @require      https://fastly.jsdelivr.net/npm/ ... nilla.production.js
// @require      https://fastly.jsdelivr.net/npm/ ... eware.production.js
// @run-at       document-start
// ==/UserScript==

const scraperSessionInitialState = {
    scraping: false,
    chapterLevelList: {}
};

const scraperSessionStore = this.zustandVanilla.createStore()(
    middleware.subscribeWithSelector(
      middleware.persist(() => scraperSessionInitialState, {
      name: "scraper-session-storage",
      storage: middleware.createJSONStorage(() => sessionStorage)
      })
    )
);
console.log(scraperSessionStore.getState().scraping);
console.log(scraperSessionStore.getState().chapterLevelList);

李恒道 发表于 2023-10-29 17:56:12

李恒道 发表于 2023-10-29 17:55
删除iffe闭包函数
善用debugger调试



middleware也没改
按前边说的umd改

tansuo 发表于 2023-10-29 18:18:51

李恒道 发表于 2023-10-28 15:52
这跟昨天的问题一样...
这种小库不用看文档的,直接读源代码就可以了

对于小菜来说读源码还是有难度

tansuo 发表于 2023-10-29 18:25:28

李恒道 发表于 2023-10-29 17:56
middleware也没改
按前边说的umd改

也是加this吗?报错Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'subscribeWithSelector')

李恒道 发表于 2023-10-29 18:48:31

tansuo 发表于 2023-10-29 18:25
也是加this吗?报错Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 's ...
没处理umd格式获取,参考我第一次的回答
这个算课后小作业了
如果哥哥没搞懂说明一开始就没听哦

tansuo 发表于 2023-10-29 20:13:57

李恒道 发表于 2023-10-29 18:48
没处理umd格式获取,参考我第一次的回答
这个算课后小作业了
如果哥哥没搞懂说明一开始就没听哦


大佬 没有错误了 第一个值获取到了,但还是不明白这个状态管理器,如何用于存储网络爬虫的会话信息。这个中间件功能是什么,请大佬指导方向
// ==UserScript==
// @name         WeRead Scraper1
// @namespace    https://github.com/Sec-ant/weread-scraper
// @version      1.4.1
// @author       Ze-Zheng Wu
// @descriptionScrape WeRead books and save them as HTML files
// @license      MIT
// @match      https://weread.qq.com/web/reader/*
// @match      https://weread.qq.com/web/book/read*
// @require      https://fastly.jsdelivr.net/npm/zustand@4.4.1/umd/vanilla.production.js
// @require      https://fastly.jsdelivr.net/npm/zustand@4.4.1/umd/middleware.production.js
// @run-at       document-start
// ==/UserScript==

const scraperSessionInitialState = {
    scraping: false,
    chapterLevelList: {}
};
const scraperSessionStore = this.zustandVanilla.createStore()(
   this.zustandMiddleware.subscribeWithSelector(
      this.zustandMiddleware.persist(() => scraperSessionInitialState, {
      name: "scraper-session-storage",
      storage: this.zustandMiddleware.createJSONStorage(() => sessionStorage)
      })
    )
);
console.log(scraperSessionStore.getState().scraping);
console.log(scraperSessionStore.getState().chapterLevelList);
页: 1 [2] 3
查看完整版本: zustand开发文档