Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@dittos
Last active May 18, 2017 15:20
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dittos/5712066 to your computer and use it in GitHub Desktop.
Save dittos/5712066 to your computer and use it in GitHub Desktop.
Accept Facebook group join request automatically.
/**
* Install PhantomJS to run: http://phantomjs.org/
* Needs jQuery 2.0.3 in the same directory (Name it as: jquery-2.0.3.min.js)
*/
var webpage = require('webpage');
config = {
email: '',
pass: '',
groups: [
// ...
]
};
function visitGroup(page, q) {
var gid = q.pop();
if (!gid) {
phantom.exit();
return;
}
console.log('start: ' + gid);
var page = webpage.create();
page.onConsoleMessage = function (msg) {
console.log(msg);
};
page.onNavigationRequested = function(url) {
if (url == 'phantomjs://exit') {
console.log('bye');
phantom.exit();
}
};
page.open('https://www.facebook.com/groups/' + gid + '/requests/', function() {
console.log('page open');
console.log('js include: ' + page.injectJs('jquery-2.0.3.min.js') ? 'ok' : 'fail');
page.evaluate(function() {
var reqs = document.getElementById('Group_member_request_pagelet').querySelectorAll('li');
var users = [];
for (var i = 0; i < reqs.length; i++) {
var user = {el: reqs[i]};
users.push(user);
var profileLink = reqs[i].querySelector('.fsl.fwb.fcb a');
user.id = profileLink.pathname.substr(1);
if (user.id == 'profile.php') {
user.id = profileLink.search.substr(4); // ?id=
}
var friendsInGroupLink = reqs[i].querySelector('a[href*="group_join_requesters_friends_in_group"]');
user.friendsInGroup = Boolean(friendsInGroupLink);
}
console.log('processing ' + users.length + ' users...');
var promises = $.map(users, function(u) {
var url = 'http://graph.facebook.com/' + u.id;
return $.get(url).then(function(json) {
u.info = json;
}, function() { console.log('fail') });
});
if (promises.length == 0) {
location.href = 'phantomjs://exit';
}
$.when.apply($, promises).then(function() {
var n = 0;
$.each(users, function(i, u) {
if (u.info.locale != 'ko_KR')
return;
if (!u.friendsInGroup)
return;
n++;
var btn = u.el.querySelector('.uiButtonConfirm');
var evt = document.createEvent('HTMLEvents');
evt.initEvent('click', true, true);
btn.dispatchEvent(evt);
});
setTimeout(function() {
location.href = 'phantomjs://exit';
}, 1000 * n);
}, function() {
console.log('fail');
location.href = 'phantomjs://exit';
});
});
});
}
var loginPage = webpage.create();
loginPage.open('http://m.facebook.com', function() {
loginPage.onNavigationRequested = function(url) {
if (url.indexOf('home.php') === -1) return;
console.log('login finished');
loginPage.onNavigationRequested = undefined;
var q = config.groups.slice(); // copy
visitGroup(loginPage, q);
};
loginPage.evaluate(function(config) {
var email = document.querySelector('input[name="email"]');
email.value = config.email;
var pass = document.querySelector('input[name="pass"]');
pass.value = config.pass;
email.form.submit();
}, config);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment