2010-05-18 59 views
30

我已经花了一个小时在这个黑客攻击:我想写一个Javscript例程以编程方式将自己从Facebook上的照片中解脱出来。一旦它起作用,我将在Firebug控制台中运行它,并从所有Facebook照片中删除自己(无法通过GUI执行此操作)。使用Javascript以编程方式取消标记FB照片

我想看看你们是否有一些建议让我走上旅途。

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

/ajax/photo_tagging_ajax.php?pid= (PICTURE_ID) & ID = (PICTURE_OWNER_ID) &受试者= (东西) &名称= (YOUR + NAME) &行动=除去

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

只是为了澄清,我也试着对“remove tag”锚点做一个getElementById,然后做一个document.location switcharoo,但那不起作用。我也无法对它执行.click()。

这将是可能的还是我梦想? (现在已经快4AM了)

+8

+1。 – 2010-05-18 07:46:07

+0

谢谢。我们需要找到一种方法来做到这一点。顺便说一句,我受到了这个启发:http://www.reclaimprivacy.org – Tal 2010-05-18 07:50:50

回答

3

由于我不知道你是否在HN拿起我的更新版本:从Facebook的照片取消标记

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); 
1

Chickenfoot http://groups.csail.mit.edu/uid/chickenfoot/是一个Firefox插件,可能是使用Firebug控制台的替代方案:您可以编写宏/脚本来自动执行浏览器中的重复性任务。您编码的行为与您实际点击,填写表单或您自己的任何内容没有什么不同。至于我记得有一个DOM接口,用于遍历HTML等

7

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); 

它不更新用户界面。 fb_dtsg和post_form_id是必需的,并且似乎是反CSRF令牌。还没有足够的实验来确定它们是否可以多次重复使用。

+0

我会测试这个。从未使用FireQuery,但这听起来很有希望! – Tal 2010-05-18 15:14:25

+0

该正则表达式缺少一个案例。 Facebook有时在pid和id之间存在一些问题。只需在*之间添加*,它就可以工作: var loc = window.location.href.match(/ pid =(\ d +)。*&id =(\ d +)/); 匆匆一瞥,这对我不起作用。它确实发送了某种请求,但图片仍然被标记。 – Tal 2010-05-18 16:57:16