2010-05-18 112 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