1. 技术的难点
1.1 网页中的动态列表不能显示全部内容
新浪微博有点特殊,全部内容都在同一个页面中。内容是通过一个动态列表展示

如果直接调用浏览器的截图,是获取不到完整内容的,因为动态列表组件只会渲染屏幕内的节点,如下图,
屏幕外的节点全不见了。

通过节点名,我知道了这是一个开源vue组件vue-recycle-scroller
https://github.com/Akryum/vue-virtual-scroller
同时也知道了,这个项目是用vue开发的。

从开源项目的文档中得知,可以通过修改buffer值,来控制动态列表提前缓存的节点数。
于是,我目前的方案是
可以先找到vue-recycle-scroller组件根结点node
yaml
const targetNode = document.querySelector(itemWrapperSelector);
然后获取vue属性
yaml
scroller.__vue__
修改buffer为一个超级大的值,让动态列表能提交缓存尽量多的节点。
yaml
scroller.__vue__.buffer=500000
然后通过程序模拟滚动操作,让页面不断加载新的节点。让动态列表将全部节点生成好。
1.2 如何让隐藏的动态列表显示出来
虽然上面的方法让所有节点都生成了,但是动态列表会控制只显示能看到的,看不到的隐藏了,如下图。
所以如果此时截图,还是不行。

而且这些不可见的节点坐标是错误的,需要为他们重新计算位置,然后把他们显示出来
1.3 微博信息太多,程序没法处理怎么办
如果节点太多,比如上千条,如果让所有节点全显示,浏览器会卡死。
不过天无绝人之路,我
不过,我看到微博有搜索框。可以通过时间范围分段截屏

https://github.com/gildas-lormeau/SingleFile
https://github.com/gildas-lormeau/SingleFile/issues/440
https://github.com/gildas-lormeau/SingleFile/issues/483

2. 账号
新增账号方式没变

3. 任务
为了处理微博这种特殊的情况,增加了一个平台字段,如下

4. 效果
图片和mhtml都生成出来了,效果挺好。

