Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Email: tarasov.romka@gmail.com
- var result = ""
- var amount
- chrome.runtime.onMessage.addListener(
- function(request, sender, sendResponse) {
- console.log(sender.tab ?
- "from a content script:" + sender.tab.url :
- "from the extension");
- console.log(request.number)
- amount = request.number
- chrome.runtime.sendMessage({
- action: "FBgetGroupMembers",
- source: FBPharseGroupMembers(document)
- });
- sendResponse({farewell: "Hello popup"});
- });
- function FindElement(selector,scope) {
- // console.log('Finding element:'+selector);
- var _xpath = document.evaluate(selector,scope,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);
- return _xpath.singleNodeValue;
- }
- function FindElements(selector,scope) {
- // console.log('Finding elements:'+selector);
- var _xpath = document.evaluate(selector,scope,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
- var count = _xpath.snapshotLength;
- console.log("els="+count);
- var res = []
- for (var i = 0; i < count; ++i) {
- el = _xpath.snapshotItem(i);
- res.push(el);
- }
- return res;
- }
- function GetTextOnly(element) {
- var text = '';
- var isAdded = false;
- for (var i = 0; i < element.childNodes.length; ++i)
- if (element.childNodes[i].nodeType === 3)
- text += element.childNodes[i].textContent;
- var text = text.replace(/Joined/i, '');
- var newtext = text.replace(/Added by/i, '').split(' on ');
- var options = { year: 'numeric', month: 'long', day: 'numeric' };
- if (cutter = newtext[0].indexOf('Today') + 1) {
- var today = new Date();
- newtext[0] = newtext[0].substring(0, cutter-2);
- newtext[1] = today.toLocaleDateString("en-US",options);
- } else if (cutter = newtext[0].indexOf('Yesterday') + 1) {
- var today = new Date();
- var yesterday = new Date(today.setDate(today.getDate() - 1));
- newtext[0] = newtext[0].substring(0, cutter-2);
- newtext[1] = yesterday.toLocaleDateString("en-US",options);
- }
- var dateAdded = newtext[1];
- if (newtext[0] != text)
- isAdded = true;
- newtext = newtext[0].trim();
- return [newtext,isAdded, dateAdded];
- }
- function SaveToCSV(csv, filename, isMembersPage) {
- var universalBOM = "\uFEFF"; // For other UTF-8 symbols
- csv = universalBOM + csv;
- var blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
- if (navigator.msSaveBlob) { // IE 10+
- navigator.msSaveBlob(blob, filename);
- } else {
- var link = document.createElement("a");
- if (link.download !== undefined) { // feature detection
- // Browsers that support HTML5 download attribute
- var url = URL.createObjectURL(blob);
- link.setAttribute("href", url);
- link.setAttribute("download", filename);
- link.style.visibility = 'hidden';
- document.body.appendChild(link);
- if (isMembersPage)
- link.click();
- document.body.removeChild(link);
- }
- }
- }
- function scroll(){
- window.scrollTo(0,document.body.scrollHeight);
- var res = setTimeout(parse, 2000)
- }
- function saveAndShow(res, counter, separator, isMembersPage){
- res += separator+"\nEnd of results, total members = "+counter+"\n";
- // Save CSV
- result = res;
- filename = 'data_' + Date.now();
- SaveToCSV(res, filename, isMembersPage);
- console.log("END!");
- chrome.runtime.sendMessage({
- action: "FBgetGroupMembers",
- source: result
- });
- return res
- }
- function parse(){
- var separator = ";";
- var res = 'Name'+separator+'Added By'+separator+'Date of joining'+separator+'\n';
- var counter = 0;
- console.log('Start');
- var isMembersPage = true;
- // var scroller_el = FindElement("//div[contains(@class, 'uiMorePager')]/div/a", document);
- // <div class="profileBrowserGrid expandedList fbProfileBrowserNoMoreItems">
- var cont_el = FindElement("(//div[contains(@class,'fbProfileBrowserList') and contains(@class,'fbProfileBrowserListContainer')])[last()]", document);
- if (cont_el) {
- console.log(cont_el);
- var table_list = FindElements(".//ul", cont_el);
- console.log("TablesCount="+table_list.length);
- for (var i = 0, ilen = table_list.length; i < ilen; i++) {
- var table_el = table_list[i];
- if (table_el) {
- var trs_list = FindElements(".//div[contains(@data-name,'GroupProfileGridItem')]", table_el);
- // console.log(trs_list)
- console.log("Table="+i);
- for (var y = 0, ylen = trs_list.length; y < ylen; y++) {
- var el = trs_list[y];
- // console.log(el)
- if (el.innerHTML === "")
- break; // Skip empty element
- counter += 1;
- var profile_el = FindElement(".//div[contains(@class,'uiProfileBlockContent')]", el);
- // console.log(profile_el);
- // FIND NAME
- var name = FindElement(".//div/div[2]/div/a", profile_el).text;
- console.log(name)
- res += name+separator;
- // console.log("NAME="+name);
- // FIND ADDED BY
- var added_by_el_tmp = FindElement(".//div/div[2]", profile_el);
- // console.log(added_by_el_tmp)
- var addedInfEl = FindElement(".//div/div[2]/div[2]", profile_el)
- // console.log(addedInfEl)
- var added_by_el_count = added_by_el_tmp.childElementCount;
- if (added_by_el_count === 3) {
- // var added_by_el = FindElement(".//div[2]/div", added_by_el_tmp);
- var added_by_el = FindElement(".//div[2]", added_by_el_tmp); // FIXED
- console.log(added_by_el)
- } else {
- console.log(added_by_el_count)
- var added_by_el = FindElement(".//div[3]", added_by_el_tmp);
- console.log("error break")
- }
- // added_by_el = added_by_el_tmp // error string
- // console.log(added_by_el);
- var added_by = GetTextOnly(added_by_el);
- if (added_by[1])
- res += added_by[0]+separator;
- else
- res += "Unknown"+separator;
- // console.log(added_by_el);
- // FIND ADDED DATE
- // added_date = FindElement(".//div[2]/div[1]/div[2]/abbr", profile_el).title;
- added_date = added_by[2];
- res += added_date+separator+"\n";
- // console.log("DATE="+added_date);
- if (counter === amount){
- return saveAndShow(res, counter, separator, isMembersPage)
- }
- }
- }
- }
- if (counter < amount){
- res = "";
- setTimeout(scroll, 2000);
- }
- else{
- return saveAndShow(res, counter, separator, isMembersPage)
- }
- }
- else {
- res = "This is not Facebook Group Members page("
- isMembersPage = false;
- return res;
- }
- // return res;
- }
- function FBPharseGroupMembers(document_root) {
- var res = setTimeout(parse, 2000);
- res = "Parsing..."
- console.log(res)
- console.log("END!");
- return res;
- // var separator = ";";
- // var res = 'Name'+separator+'Added By'+separator+'Date of joining'+separator+'\n';
- // var counter = 0;
- // console.log('Start');
- // var isMembersPage = true;
- // // var scroller_el = FindElement("//div[contains(@class, 'uiMorePager')]/div/a", document);
- // // <div class="profileBrowserGrid expandedList fbProfileBrowserNoMoreItems">
- // var cont_el = FindElement("(//div[contains(@class,'fbProfileBrowserList') and contains(@class,'fbProfileBrowserListContainer')])[last()]", document);
- // if (cont_el) {
- // console.log(cont_el);
- // var table_list = FindElements(".//ul", cont_el);
- // console.log("TablesCount="+table_list.length);
- // for (var i = 0, ilen = table_list.length; i < ilen; i++) {
- // var table_el = table_list[i];
- // if (table_el) {
- // var trs_list = FindElements(".//div[contains(@data-name,'GroupProfileGridItem')]", table_el);
- // // console.log(trs_list)
- // console.log("Table="+i);
- // for (var y = 0, ylen = trs_list.length; y < ylen; y++) {
- // var el = trs_list[y];
- // // console.log(el)
- // if (el.innerHTML === "")
- // break; // Skip empty element
- // counter += 1;
- // var profile_el = FindElement(".//div[contains(@class,'uiProfileBlockContent')]", el);
- // // console.log(profile_el);
- // // FIND NAME
- // var name = FindElement(".//div/div[2]/div/a", profile_el).text;
- // console.log(name)
- // res += name+separator;
- // // console.log("NAME="+name);
- // // FIND ADDED BY
- // var added_by_el_tmp = FindElement(".//div/div[2]", profile_el);
- // // console.log(added_by_el_tmp)
- // var addedInfEl = FindElement(".//div/div[2]/div[2]", profile_el)
- // // console.log(addedInfEl)
- // var added_by_el_count = added_by_el_tmp.childElementCount;
- // if (added_by_el_count === 3) {
- // // var added_by_el = FindElement(".//div[2]/div", added_by_el_tmp);
- // var added_by_el = FindElement(".//div[2]", added_by_el_tmp); // FIXED
- // console.log(added_by_el)
- // } else {
- // console.log(added_by_el_count)
- // var added_by_el = FindElement(".//div[3]", added_by_el_tmp);
- // console.log("error break")
- // }
- // // added_by_el = added_by_el_tmp // error string
- // // console.log(added_by_el);
- // var added_by = GetTextOnly(added_by_el);
- // if (added_by[1])
- // res += added_by[0]+separator;
- // else
- // res += "Unknown"+separator;
- // // console.log(added_by_el);
- // // FIND ADDED DATE
- // // added_date = FindElement(".//div[2]/div[1]/div[2]/abbr", profile_el).title;
- // added_date = added_by[2];
- // res += added_date+separator+"\n";
- // // console.log("DATE="+added_date);
- // }
- // }
- // }
- // res += separator+"\nEnd of results, total members = "+counter+"\n";
- // } else {
- // res = "This is not Facebook Group Members page("
- // isMembersPage = false;
- // }
- // // Save CSV
- // filename = 'data_' + Date.now();
- // SaveToCSV(res, filename, isMembersPage);
- // console.log("END!");
- // return res;
- }
- // chrome.runtime.sendMessage({
- // action: "FBgetGroupMembers",
- // source: FBPharseGroupMembers(document)
- // });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement