Skip to content

OxalisCu/vivo-notes-export

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

vivo 原子笔记批量导出工具

最近整理电子数据进行网盘备份时候,发现 vivo 的原子笔记不支持批量导出,只能支持单个单个导出。而我之前用 vivo 笔记来写日记,到现在也写了几百篇,逐个点击导出的话胜似捏鼻子吃史。在网上搜寻过后没有发现有类似工具,于是做了个自用。

写代码一小时,改bug三小时,剪视频剪了三小时。最开始是用我自己的日记来作为例子演示,然后在视频里面码掉日记内容,码完之后还是有露出来的,害怕盯帧侠盯出来,还是自己建了些示例笔记来重新录了一遍,感觉自己是换了个地方把史给吃了,怒。

一、使用

演示视频

vivo原子笔记批量导出工具

使用步骤

(1)打开 vivo 笔记网页版 vivo 办公套件

(2)复制 prepare.js 中代码,在控制台执行,等待执行完成

(3)修改 export.js 中 startNameendName,即从哪个笔记开始导出和结束导出

(4)复制 export.js 中代码,在控制台执行,等待执行完成

(5)可以继续重复 3~4 步骤,下载剩余笔记

注意事项

(1)写死的逻辑导出的是 txt 格式,并且遇到重名的笔记会暂停导出

(2)执行脚本时候不要滚动或点击笔记列表

(3)若笔记下载重复或者其他问题,尝试浏览器前台运行,不要切后台

(4)虽然逻辑上脚本是通用的,但是实际使用起来可能非常脆弱,懒得完善了,有其他人用再说

二、代码

github 仓库

vivo-notes-export

思路简述

如果有人看代码的话,可以参考下这里简要的思路说明。

批量导出的话两种思路,一种是调 vivo 的后端接口导出,但是看了下,接口返回的笔记内容是加密的,就放弃了;另外一种就是通过前端方式,模拟按钮点击,去自动化笔记下载,也是目前实现方式。

主要分为两个步骤,首先加载笔记列表,然后选中某个笔记点击导出:

(1)prepare.js

vivo 笔记左侧的笔记列表是滚动的,并且笔记少的时候,滚动列表中展示全部笔记;如果笔记数量过多,会切换到虚拟滚动列表,一次只会加载几十条笔记。

所以在 prepare.js 中,直接将列表滚动到底,如果数据过多,则会把虚拟滚动列表触发出来,这样不会在下载中途切换滚动列表,导致下载失败。

(2)export.js

在 export.js 中执行具体导出逻辑,主要是获取当前笔记列表,然后逐一选中导出,如果是虚拟滚动列表,则尝试向下滚动加载更多笔记,递归导出。

由于点击、滚动等动作会触发数据请求,所以需要设置延时执行下一操作,并且遍历笔记列表和递归下载更多笔记这些操作,有动作的先后顺序不能打乱,所以这里采用 setTimeout 来定时执行操作,用变量 k 来分配执行时间的先后。

(3)demo-1.js, demo-2.js

两个自己调 bug 过程中的示例代码。在 setTimeout 执行时候遇到一些bug,最后调试发现是闭包导致传入 setTimeout 的 k 值不符合预期,没想到很久没写前端了,闭包又把我暗算了一次。这个 bug 可以在这两个示例文件中模拟复现,demo-1.js 是错误逻辑,demo-2.js 是正确逻辑。

About

vivo notes batch export tool

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published