【问题标题】:click all "see more"s of posts in fb点击fb中所有“查看更多”的帖子
【发布时间】:2014-07-14 21:56:47
【问题描述】:

我在 FB 中有一个包含很多帖子的页面。 我想将所有帖子的文本复制到 txt 文件中。 我该怎么办 ? 有什么捷径吗? 我向下滚动直到加载所有帖子并按ctrl + actrl + c然后粘贴到txt文件中,但有些帖子没有完全复制,他们复制到“查看更多”。

我怎样才能点击页面中的所有查看更多?

我在控制台中试过这个:

$( document ).ready(function() {
  document.getElementsByclassName('see_more_link').click();
});

但它不起作用。

有什么想法可以解决问题吗??

(如果我的英文写作太弱,我很抱歉:(()

【问题讨论】:

    标签: javascript jquery facebook node.js console


    【解决方案1】:

    你可能想看看这个链接:https://www.facebook.com/apps/site_scraping_tos_terms.php

    不允许刮擦。如果你想从 Facebook 获取数据,你应该使用 API:https://developers.facebook.com/docs/

    要使用 API 获取 Facebook 页面的提要,请查看此线程:Facebook PHP SDK 3.0 - How to get my page wall posts at any time?

    【讨论】:

    • 你的意思是没有The Graph Api就没有办法获取Facebook数据吗? @luschn
    • 那会是刮,根据条款是不允许的。
    • 你能给我举个例子来收集这个页面的所有帖子吗:facebook.com/eterafate.ahmaghaneh.shoma
    【解决方案2】:

    我来这里是想知道怎么做,但找不到。所以我自己做了。

    此函数用于按顺序运行循环(感谢 Ivo Wetzel 的回答 here):

    function asyncLoop(iterations, func, callback) {
      var index = 0;
      var done = false;
      var loop = {
        next: function() {
          if (done) {
            return;
          }
          if (index < iterations) {
            index++;
            func(loop);
          } else {
            done = true;
            callback();
          }
        },
        iteration: function() {
          return index - 1;
        },
        break: function() {
          done = true;
          callback();
        }
      };
      loop.next();
      return loop;
    }
    

    另一个是在链接中模拟点击(不记得我在哪里看到的):

    function hacerClic(obj, callback) {
      var evt = document.createEvent("MouseEvents");
      evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
      var canceled = !obj.dispatchEvent(evt);
      callback();
    }
    

    最后,我们为 asyncLoop 运行了两次,一次用于扩展答案

    var verRespuestas = document.getElementsByClassName("UFIReplySocialSentenceLinkText");
    var i = 0;
    asyncLoop(verRespuestas.length, function(loop) {
      hacerClic(verRespuestas[i], function(result) {
        loop.next();
        i++;
      })
    }, function() {});
    

    以及其他扩大“查看更多”

    var verMas = document.getElementsByClassName("_5v47");
    var j = 0;
    asyncLoop(verMas.length, function(loop) {
      hacerClic(verMas[j], function(result) {
        loop.next();
        j++;
      })
    }, function() {});
    

    注意:如果“查看更多”循环出错可能是因为 DOM 尚未完全加载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-13
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      • 2019-07-13
      • 2016-11-04
      • 2013-01-03
      • 1970-01-01
      相关资源
      最近更新 更多