内容转载自我的博客

文章目录

  • 1. 目标网站
  • 2. 保存浏览器调试窗口的变量到本地文件
  • 3. 编写代码
  • 4. 备份完成
  • 5. 后记

1. 目标网站

此代码是专门为了备份本人的QQ空间留言板的数据而编写的,前提是自己在浏览器登录Qzone账号,且代码只能运行在此链接https://user.qzone.qq.com/123456789/infocenter,其中的123456789是用户本人的qq号码,另外用户要手动点击网页的留言板栏目,然后再运行代码。实现的功能是将每一层楼的留言数据按顺序保存

2. 保存浏览器调试窗口的变量到本地文件

编写以下代码,粘贴到控制台并回车

// 为标准console对象添加一个save函数
(function(console){console.save = function(data, filename){// 若data为空则提示用户if(!data) {console.error('Console.save: No data');return;}// 默认文件名if(!filename){filename = 'console.json';}if(typeof data === "object"){data = JSON.stringify(data, undefined, 4);}var blob = new Blob([data], {type: 'text/json'}),e = document.createEvent('MouseEvents'),a = document.createElement('a');a.download = filename;a.href = window.URL.createObjectURL(blob);a.dataset.downloadurl = ['text/json', a.download, a.href].join(':');e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);a.dispatchEvent(e);}
})(console)

然后可以在控制台输入console.save(var_imgs, 'imgs.json')并回车,浏览器会自动弹出下载文件窗口,并将此变量内容以json格式保存到本地

3. 编写代码

此网站的数据如果需要备份,必须注册并登录账号
本代码假定已经登录账号的情况下,且用户已经输入链接https://user.qzone.qq.com/123456789/infocenter,其中的123456789是用户本人的qq号码,并手动点击网页的留言板栏目,用户需要自己查看留言板的总页数,将它写入变量comment_page_number,然后粘贴并运行代码即可

// 保证F12后的console处选中tgb(msgbcanvas.html)而不是top,否则会出错// var comment_page_div = document.getElementsByClassName("mod_pagenav_count")[1].getElementsByTagName('a');
// var comment_page_number = parseInt(comment_page_div[comment_page_div.length-1].textContent);
// 留言的页数,将当前页面打开为留言的最新一页
var comment_page_number =77;
var comment_array = new Array();
// 为标准console对象添加一个save函数
(function(console){console.save = function(data, filename){if(!data) {console.error('Console.save: No data');return;}if(!filename){filename = 'console.json';}if(typeof data === "object"){data = JSON.stringify(data, undefined, 4);}var blob = new Blob([data], {type: 'text/json'}),e = document.createEvent('MouseEvents'),a = document.createElement('a');a.download = filename;a.href = window.URL.createObjectURL(blob);a.dataset.downloadurl = ['text/json', a.download, a.href].join(':');e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);a.dispatchEvent(e);}
})(console)// 解析回复部分
function parse_reply(ol_reply) {var result = [];if(ol_reply.textContent==''){return [];}var content, timestamp, source;for(var i=0;i<ol_reply.childElementCount;i++){li_reply = ol_reply.childNodes[i];info = li_reply.firstElementChild.lastElementChild;source = info.firstElementChild.firstElementChild.textContent;content = info.firstElementChild.textContent.substring(source.length+1);timestamp = info.lastElementChild.firstElementChild.textContent;result.push({'发送方':source, '发送内容':content, '时间':timestamp});}return result;
}// 解析某条评论
function parse_comment(comment_item) {var div_inner = comment_item.firstElementChild.lastElementChild.firstElementChild.firstElementChild;var span_user = div_inner.childNodes[0].firstElementChild.firstElementChild.firstElementChild;var username = span_user.textContent;var userlink = span_user.href;var floor_index = div_inner.childNodes[0].childNodes[1].textContent;// 暂不支持图片及表情,这些内容会显示为''var content = div_inner.childNodes[2].firstElementChild.textContent;var div_reply = parse_reply(div_inner.childNodes[4].lastElementChild.childNodes[2]);var timestamp = div_inner.childNodes[2].lastElementChild.firstElementChild.textContent;var result = {'用户':username, '链接':userlink, '楼层':floor_index,'内容':content, '时间':timestamp, '回复':div_reply}comment_array.push(result);console.log(result);
}// 解析某一页的结果
function parse_single() {var comments = document.getElementById("ulCommentList");for(var i=0;i<comments.childElementCount;i++){parse_comment(comments.childNodes[i]);}
}function control_page(index) {if(index>=comment_page_number){console.save(comment_array, '评论.json');return;}// 解析当前页面parse_single();// -1表示上一页,1表示下一页QZBlog.Util.PageIndexManager.goPage(1);// QZBlog.Util.PageIndexManager.goDirectPage(77)index = index + 1;setTimeout(control_page, 5000, index);
}setTimeout(control_page, 5000, 0);/*
// 解析某条评论
function parse_comment_bk(comment_item) {var inner_item = comment_item.getElementsByClassName('inner')[0];var username = inner_item.getElementsByClassName('c_tx q_namecard')[0].textContent;var userlink = inner_item.getElementsByClassName('c_tx q_namecard')[0].href;var floor_index = inner_item.getElementsByClassName('c_tx3 floor')[0].textContent;// var mobile_cp = inner_item.getElementsByClassName('c_tx3 unline')[0].textContent;var content = inner_item.getElementsByTagName("table")[0].textContent;var timestamp = inner_item.getElementsByClassName('c_tx3 mode_post')[1].textContent;var result = {'用户':username, '链接':userlink, '楼层':floor_index,'内容':content, '时间':timestamp}comment_array.push(result);console.log(result);
}// 解析某一页的结果
function parse_single_bk() {var comments = document.getElementById("ulCommentList").getElementsByTagName("li");for(var i=0;i<document.getElementById("ulCommentList").length;i++){parse_comment(comments[i]);}
}
*/

4. 备份完成

最后的json文件部分内容示例如下,只支持文字消息的备份

[{"用户": "张三","链接": "http://user.qzone.qq.com/111222333","楼层": "第310楼","内容": "生日快乐","时间": "2020-07-06 21:23","回复": [{"发送方": "我","发送内容": "谢谢","时间": "2019-07-06 23:24"},{"发送方": "张三","发送内容": "明天见","时间": "2019-07-06 23:26"},{"发送方": "我","发送内容": "哈哈,回见","时间": "2019-07-06 23:30"}]},{"用户": "李四","链接": "http://user.qzone.qq.com/123412345","楼层": "第309楼","内容": "新年快乐","时间": "2020-02-01 17:44","回复": [{"发送方": "我","发送内容": "谢谢,同乐","时间": "2020-02-01 23:24"}]},{"用户": "王五","链接": "http://user.qzone.qq.com/666777888","楼层": "第308楼","内容": "加油!!!!","时间": "2019-06-06 00:21","回复": [{"发送方": "我","发送内容": "共勉","时间": "2019-06-06 17:05"}]},// 以下内容省略
]

5. 后记

当我完成之后,发现github已经有整个QQ空间的备份工具了。。。

使用JavaScript备份QQ空间的留言板数据相关推荐

  1. 主题模型(LDA)案例:分析人民网留言板数据

    随着网民规模的不断扩大,互联网不仅是传统媒体和生活方式的补充,也是民意凸显的地带.领导干部参与网络问政的制度化正在成为一种发展趋势,这种趋势与互联网发展的时代需求是分不开的. ▼ 人民网<地方领 ...

  2. 最新版qq空间刷留言小秘书 V1.20 正式版

    软件介绍: 这是一款QQ空间互踩辅助软件,以往大家都要通过QQ好友和加入QQ互踩群相互进入对方空间进行留言和评论,而且大部分QQ空间访问速度很慢,操作也繁琐,现在有了QQ空间小秘书,您无需进入空间,它 ...

  3. JavaScript用事件委托实现留言板功能

    用事件委托实现留言板功能. <!DOCTYPE html> <html lang="en"><head><meta charset=&qu ...

  4. PHP面向对象留言板(一)查询出JSON格式的留言板数据

    使用mysqli连接数据库,采用面向对象风格编程,没做前端,json格式输出数据 code: https://code.csdn.net/u012995856/oop_liuyanban/tree/m ...

  5. QQ空间评价 留言搞笑长句大全

    1.我在老家,没网没WIFI,为了赞你这条说说,我走了几十公里的山路来到镇上,脚上磨起了许多豆大 的水泡,鞋子也开胶了.本来想把家里的苞谷卖掉几十斤,在镇上坐车到城里的网吧赞你这条说说的, 无奈天公不 ...

  6. QQ空间定时留言程序。

    已经可以自动登录了... 求指点..... 注意:启动时QQ号要填别人的.(留言程序只支持给别人留言) 源码路径:  https://github.com/gaoconggit/QQ-.git 修复 ...

  7. 如何备份你的 QQ 空间相册

    领红包方法见文末 周末无聊的时候打开了下久违的QQ空间,那么多年的记录都还在.曾经建的杰伦相册. 想到之前网易相册都关闭了,虽然腾讯家大业大,但万一呢,于是想着把QQ空间的图片都备份下来.于是有了今天 ...

  8. 网络营销技术之——QQ空间留言

    QQ空间留言器 原文:http://www.cnblogs.com/txw1958/articles/QZoneMessager.html QQ空间留言器 QQ空间留言器是一个可以批量给QQ空间留言的 ...

  9. 转载一些关于QQ空间的文章

    非主流阳光女生qq头像_自己才是这一生最要疼的人 日期:2010-05-23 qq女生静态头像大全_我期待一个人能够保护我 日期:2010-05-23 qq女生伤感头像_又想起了你在炎热的夏季 日期: ...

最新文章

  1. 7-27 冒泡法排序 (C语言)
  2. 有关军事人机混合智能的再再思考
  3. JS ajax 返回的json对象 新增属性值(干货)
  4. 尾递归对时间与空间复杂度的影响(上)
  5. java 线程同步的方法_Java多线程同步方法
  6. hdu1501Zipper(记忆化搜索)
  7. python ping利用线程池获取在线设备
  8. 二叉树最近公共祖先 LCA
  9. 将list的内容转换成固定个数的分组字符串
  10. C语言之数组和指针位移的本质(四十五)
  11. 去哪儿app_58款APP遭点名,多家基金、银行产品上榜!
  12. JavaScript实现对象的深度克隆及typeof和instanceof【简洁】【分享】
  13. 语言类型介绍及其Python的语言类型
  14. Spring Security整合KeyCloak保护Rest API
  15. 逆向工具Cutter
  16. 时区 夏令时造成的问题
  17. SQL AlawaysOn 之一:安装域控制器
  18. 蚂蚁开源 - 聚沙成塔,相信社区的力量 | ChinaOSC
  19. Opencv中的erode和dilate(腐蚀和膨胀-python实现)
  20. C语言中EOF的应用

热门文章

  1. 「国家战略科学家」身份!AI学者朱松纯加盟清华筹建通用AI研究院
  2. 写在毕业季:师兄告诉你如何找工作
  3. Oracle Clob类型踩坑系列
  4. 【逆向破解】某游戏助手V7.2去广告调试过程
  5. [转载]清末烟台邮局旧影
  6. 视频质量评价——从裁判到教练
  7. 计算机图形学 学习笔记 二维几何变换
  8. DC/DC:闭环控制的升压(Boost)变换电路原理设计及实验仿真
  9. 阿里安全潘多拉实验室龙磊:越狱 iOS 11.2,我选了一条最难走的路
  10. FPGA项目实战学习分享_W2