30

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

我想看看你们是否有一些建议可以让我踏上我的旅程。

我想到了一些方法,但还没有走得太远。我通过创建一个新的 HTML 请求并将其指向 remove_tag URL 来尝试 AJAX 方法,它看起来像这样:

/ajax/photo_tagging_ajax.php?pid= (PICTURE_ID) &id= (PICTURE_OWNER_ID) &subject= (SOMETHING) &name= (YOUR+NAME) &action=remove

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

为了澄清起见,我还尝试在“删除标签”锚点上执行 getElementById,然后执行 document.location switcharoo,但这不起作用。我也不能对它做一个 .click() 。

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

4

3 回答 3

7

来自DCoder,来自Hacker News

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

  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 令牌。还没有进行足够的实验来知道它们是否可以多次重复使用。

于 2010-05-18T09:47:17.293 回答
3

因为我不确定你是否在 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);
于 2010-05-20T18:40:27.940 回答
1

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

于 2010-05-18T09:17:43.193 回答