【问题标题】:Programmatically Untag FB Photos with Javascript使用 Javascript 以编程方式取消标记 FB 照片
【发布时间】:2011-02-20 18:26:17
【问题描述】:

在过去的一个小时里,我一直在解决这个问题:我想编写一个 Javscript 例程,以编程方式从 Facebook 上的照片中取消标记自己。一旦它工作,我将在 Firebug 控制台中运行它并从所有 Facebook 照片中取消标记自己(无法通过 GUI 执行此操作)。

我想看看你们有没有什么建议让我踏上我的旅程。

我想到了一些方法,但还没有走得太远。我尝试了一种 AJAX 方法,方法是创建一个新的 HTML 请求并将其指向 remove_tag URL,如下所示:

/ajax/photo_tagging_ajax.php?pid=(PICTURE_ID)&id=(PICTURE_OWNER_ID)&subject=(SOMETHING)&name=(你的名字)&action=remove

毫不奇怪,这(还)不起作用。我一直在检查 Firebug 中的 HTTP 响应,它与我实际取消标记图片时的响应完全不同。它甚至没有发送 POST 请求。

澄清一下,我还尝试在“删除标签”锚点上执行 getElementById,然后执行 document.location switcharoo,但这不起作用。我也无法对其进行 .click() 操作。

这有可能还是我在做梦? (已经快凌晨 4 点了)

【问题讨论】:

  • +1 用于从 Facebook 取消标记照片。
  • 谢谢。我们需要找到一种方法来做到这一点。顺便说一句,我受到了启发:reclaimprivacy.org

标签: javascript ajax facebook privacy


【解决方案1】:

来自DCoder,通过Hacker News

使用 Firebug、FireQuery、jQuery 没有冲突作为 $jq,来自照片页面 (http://www.facebook.com/photo.php?pid=xxx&id=y):

  var loc = window.location.href.match(/pid=(\d+)&id=(\d+)/);

  var args = {
    pid: loc[1], // photo ID
    id: loc[2], // request sender id? photo owner id? not sure, haven't tested, but my user ID worked when trying to remove someone from a photo in my album
    subject: loc[2], // user ID to remove
    name: '', // not checked
    action: 'remove',
    __a: 1,
    fb_dtsg: $jq('input[name="fb_dtsg"]').val(),
    post_form_id: $jq('#post_form_id').val(),
    post_form_id_source: 'AsyncRequest'
  };

  $jq.post('/ajax/photo_tagging_ajax.php', args);

它不会更新 UI。 fb_dtsg 和 post_form_id 是必需的,并且似乎是反 CSRF 令牌。还没有进行足够的实验来了解它们是否可以多次重复使用。

【讨论】:

  • 我将对此进行测试。从未使用过 FireQuery,但这听起来很有希望!
  • 那个正则表达式缺少一个案例。 Facebook 有时在 pid 和 id 之间存在一些问题。只需在其间添加 .* 即可: var loc = window.location.href.match(/pid=(\d+).*&id=(\d+)/);粗略一看,这对我不起作用。它确实发送了某种请求,但图片仍然被标记。
【解决方案2】:

因为我不确定你是否在 HN 拿到了我的更新版本:

  var loc = window.location.href.split('?')[1].split('#')[0].split('&');
  var qs = {};
  $jq.each(loc, function(ix, el) {
   var m = el.split('='), k = m[0], v = m[1];
   qs[k] = v;
  });

  var args = {
    pid: qs.pid, // photo ID
    id: qs.id, // photo owner ID
    subject: Env.user, // user ID to remove
    name: '', // not checked
    action: 'remove',
    __a: 1,
    fb_dtsg: Env.fb_dtsg,
    post_form_id: Env.post_form_id,
    post_form_id_source: 'AsyncRequest'
  };

  $jq.post('/ajax/photo_tagging_ajax.php', args);

【讨论】:

    【解决方案3】:

    Chickenfoot http://groups.csail.mit.edu/uid/chickenfoot/ 是一个 Firefox 插件,可以替代使用 Firebug 控制台:您可以编写宏/脚本来自动执行浏览器中的重复性任务。您编写的操作与您实际单击、填充表单或您自己的任何操作没有什么不同。据我所知,有一个用于遍历 html 等的 DOM 接口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      相关资源
      最近更新 更多