使用 Javascript 以编程方式取消标记 FB 照片

Posted

技术标签:

【中文标题】使用 Javascript 以编程方式取消标记 FB 照片【英文标题】:Programmatically Untag FB Photos with Javascript 【发布时间】: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 【参考方案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 接口。

【讨论】:

以上是关于使用 Javascript 以编程方式取消标记 FB 照片的主要内容,如果未能解决你的问题,请参考以下文章

在 JavaScript 中,我可以以编程方式为文件输入元素触发“点击”事件吗?

如何在锚点标记中以编程方式调用onclick()事件,同时在onclick函数中保留“this”引用?

如何以编程方式取消使用 searchBar 和 fetchedResultsController 的搜索?

Select2 多选 - 以编程方式取消选择/取消选择项目

Android以编程方式隐藏/取消隐藏应用程序图标

Magento - 如何以编程方式取消选中超级产品属性上的“使用默认值”?