使用 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”引用?