用一个js脚本备份饭否消息

来源:岁月联盟 编辑:exp 时间:2012-08-24

首先进入 http://m.fanfou.com 登录好自己的帐号.

然后在chrome下按F12,切换到最后一栏"Console".
在里面粘贴下面代码后回车:
var body = document.getElementsByTagName('body')[0];
var s = document.createElement('script');
s.setAttribute('type', 'text/javascript');
s.setAttribute('src', 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js');
body.appendChild(s);

然后再修改下面一段代码,将要备份的那一项前面的注释去掉
//收藏
//var next_url = "/favorites"; var type="fav";

//@我的
//var next_url = "/mentions"; var type="at";

//收到的私信
//var next_url = "/privatemsg"; var type="pri";

//发出的私信
//var next_url = "/privatemsg/sent"; var type="pri";

//个人消息
//var next_url = "/链接中的用户名"; var type="usr";

var count = 0;
var src = [];

function save_log(){

  if (typeof(next_url)!="undefined" && next_url!=null) {

    $.get("http://m.fanfou.com" + next_url, function(data){
      $("html").html(data);

      if (type == "fav") {
        var p1 = $("h2").next("p").next("p").next("p");
      } else {
        var p1 = $("h2").next("p");
      }
      while (p1.html() != null && p1.next("p").html() != null) {
       
        src.push("<p>" + ++count + " " + p1.html() + "</p>/n");
        console.log("<p>" + count + " " + p1.html() + "</p>/n");
   
        p1 = p1.next("p");
      }

      next_url = p1.find("a:contains('下页')").attr("href");
      save_log();
   });

  } else {
    var str = src.join("");
    document.write(str);
    console.log("备份完成.按ctrl+s保存本页面.");
    alert("备份完成.按ctrl+s保存本页面.");
  }

}

console.log("<link rel=/"stylesheet/" href=/"http://static.fanfou.com/css/m.css/" type=/"text/css/" media=/"screen/" charset=/"utf-8/">");
src.push("<style>body{font-family:Helvetica,Arial,sans-serif;word-break:break-all;word-wrap:break-word;text-overflow:ellipsis;}body,ul,ol,form{margin:0;padding:0;}ul,ol{list-style:none;}h1,h2,h3,div,li,p{margin:0;padding:2px 2px;font-size:medium;}h2,li,#nav,.b{border-bottom:1px solid #ccc;}h1{background:#0cf;}h2{background:#ccf5ff;}a{color:#06c;text-decoration:none;}a:hover,a:focus{background:#06c;color:#fff;}table a img{padding:2px;border:1px solid #ddd;background:#fff;}.p{font-weight:bold;}.search strong{font-weight:normal;color:red;}.n{border:1px solid #ffed00;background:#fffcaa;}.t,.a,#ft{color:#999;font-size:small;}#nav{border-top:1px solid #59a1b3;}.i{width:95%;padding:2px 0;margin:auto;}</style>");

save_log();


将取消一句注释的上面那段代码也在"Console" 里面粘贴,然后回车.

然后就等结果吧.全部抓完之后会将结果显示到网页中. 按Ctrl+S就可以保存下来了.

这个脚本没有考虑性能优化问题,可能数据多了到最后会卡.请耐心等待吧..
如果备份结果没能显示在页面中,复制console里面的输出内容保存到html文件中也可以的.

欢迎各位在评论中就性能问题提供建议..


记录一下优化的几个点

一个是大字符串, 持续对String类型 += 造成性能问题.
后来改用数组, 挨个push字符串进去, 最后用join()组成大字符串, 效率高更多.

第二个是使用$("html").html(src)中参数为非常大的字符串时,
浏览器CPU占用100%并且页面完全卡死无法恢复.
后来改用document.write(str), 重写页面速度大幅提升.