myLoveOnlyForYou

Untitled

Jun 30th, 2019
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.31 KB | None | 0 0
  1. var result = ""
  2. var amount
  3.  
  4. chrome.runtime.onMessage.addListener(
  5. function(request, sender, sendResponse) {
  6. console.log(sender.tab ?
  7. "from a content script:" + sender.tab.url :
  8. "from the extension");
  9.  
  10. console.log(request.number)
  11. amount = request.number
  12. chrome.runtime.sendMessage({
  13. action: "FBgetGroupMembers",
  14. source: FBPharseGroupMembers(document)
  15. });
  16. sendResponse({farewell: "Hello popup"});
  17. });
  18.  
  19. function FindElement(selector,scope) {
  20. // console.log('Finding element:'+selector);
  21. var _xpath = document.evaluate(selector,scope,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);
  22.  
  23. return _xpath.singleNodeValue;
  24. }
  25.  
  26. function FindElements(selector,scope) {
  27. // console.log('Finding elements:'+selector);
  28. var _xpath = document.evaluate(selector,scope,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
  29.  
  30. var count = _xpath.snapshotLength;
  31. console.log("els="+count);
  32. var res = []
  33.  
  34. for (var i = 0; i < count; ++i) {
  35. el = _xpath.snapshotItem(i);
  36. res.push(el);
  37. }
  38.  
  39. return res;
  40. }
  41.  
  42. function GetTextOnly(element) {
  43. var text = '';
  44. var isAdded = false;
  45. for (var i = 0; i < element.childNodes.length; ++i)
  46. if (element.childNodes[i].nodeType === 3)
  47. text += element.childNodes[i].textContent;
  48. var text = text.replace(/Joined/i, '');
  49. var newtext = text.replace(/Added by/i, '').split(' on ');
  50.  
  51. var options = { year: 'numeric', month: 'long', day: 'numeric' };
  52.  
  53. if (cutter = newtext[0].indexOf('Today') + 1) {
  54.  
  55. var today = new Date();
  56. newtext[0] = newtext[0].substring(0, cutter-2);
  57. newtext[1] = today.toLocaleDateString("en-US",options);
  58. } else if (cutter = newtext[0].indexOf('Yesterday') + 1) {
  59. var today = new Date();
  60. var yesterday = new Date(today.setDate(today.getDate() - 1));
  61. newtext[0] = newtext[0].substring(0, cutter-2);
  62. newtext[1] = yesterday.toLocaleDateString("en-US",options);
  63. }
  64.  
  65. var dateAdded = newtext[1];
  66. if (newtext[0] != text)
  67. isAdded = true;
  68. newtext = newtext[0].trim();
  69.  
  70. return [newtext,isAdded, dateAdded];
  71. }
  72.  
  73. function SaveToCSV(csv, filename, isMembersPage) {
  74. var universalBOM = "\uFEFF"; // For other UTF-8 symbols
  75. csv = universalBOM + csv;
  76. var blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
  77. if (navigator.msSaveBlob) { // IE 10+
  78. navigator.msSaveBlob(blob, filename);
  79. } else {
  80. var link = document.createElement("a");
  81. if (link.download !== undefined) { // feature detection
  82. // Browsers that support HTML5 download attribute
  83. var url = URL.createObjectURL(blob);
  84. link.setAttribute("href", url);
  85. link.setAttribute("download", filename);
  86. link.style.visibility = 'hidden';
  87. document.body.appendChild(link);
  88. if (isMembersPage)
  89. link.click();
  90. document.body.removeChild(link);
  91. }
  92. }
  93. }
  94.  
  95. function scroll(){
  96. window.scrollTo(0,document.body.scrollHeight);
  97. var res = setTimeout(parse, 2000)
  98. }
  99.  
  100. function saveAndShow(res, counter, separator, isMembersPage){
  101. res += separator+"\nEnd of results, total members = "+counter+"\n";
  102. // Save CSV
  103. result = res;
  104. filename = 'data_' + Date.now();
  105. SaveToCSV(res, filename, isMembersPage);
  106.  
  107. console.log("END!");
  108. chrome.runtime.sendMessage({
  109. action: "FBgetGroupMembers",
  110. source: result
  111. });
  112. return res
  113. }
  114.  
  115. function parse(){
  116. var separator = ";";
  117. var res = 'Name'+separator+'Added By'+separator+'Date of joining'+separator+'\n';
  118. var counter = 0;
  119. console.log('Start');
  120.  
  121. var isMembersPage = true;
  122.  
  123. // var scroller_el = FindElement("//div[contains(@class, 'uiMorePager')]/div/a", document);
  124. // <div class="profileBrowserGrid expandedList fbProfileBrowserNoMoreItems">
  125.  
  126. var cont_el = FindElement("(//div[contains(@class,'fbProfileBrowserList') and contains(@class,'fbProfileBrowserListContainer')])[last()]", document);
  127. if (cont_el) {
  128. console.log(cont_el);
  129. var table_list = FindElements(".//ul", cont_el);
  130. console.log("TablesCount="+table_list.length);
  131.  
  132. for (var i = 0, ilen = table_list.length; i < ilen; i++) {
  133. var table_el = table_list[i];
  134. if (table_el) {
  135. var trs_list = FindElements(".//div[contains(@data-name,'GroupProfileGridItem')]", table_el);
  136. // console.log(trs_list)
  137. console.log("Table="+i);
  138. for (var y = 0, ylen = trs_list.length; y < ylen; y++) {
  139. var el = trs_list[y];
  140. // console.log(el)
  141.  
  142. if (el.innerHTML === "")
  143. break; // Skip empty element
  144.  
  145. counter += 1;
  146. var profile_el = FindElement(".//div[contains(@class,'uiProfileBlockContent')]", el);
  147. // console.log(profile_el);
  148.  
  149. // FIND NAME
  150. var name = FindElement(".//div/div[2]/div/a", profile_el).text;
  151. console.log(name)
  152. res += name+separator;
  153. // console.log("NAME="+name);
  154.  
  155. // FIND ADDED BY
  156. var added_by_el_tmp = FindElement(".//div/div[2]", profile_el);
  157. // console.log(added_by_el_tmp)
  158. var addedInfEl = FindElement(".//div/div[2]/div[2]", profile_el)
  159. // console.log(addedInfEl)
  160. var added_by_el_count = added_by_el_tmp.childElementCount;
  161. if (added_by_el_count === 3) {
  162. // var added_by_el = FindElement(".//div[2]/div", added_by_el_tmp);
  163. var added_by_el = FindElement(".//div[2]", added_by_el_tmp); // FIXED
  164. console.log(added_by_el)
  165. } else {
  166. console.log(added_by_el_count)
  167. var added_by_el = FindElement(".//div[3]", added_by_el_tmp);
  168. console.log("error break")
  169. }
  170.  
  171. // added_by_el = added_by_el_tmp // error string
  172. // console.log(added_by_el);
  173. var added_by = GetTextOnly(added_by_el);
  174. if (added_by[1])
  175. res += added_by[0]+separator;
  176. else
  177. res += "Unknown"+separator;
  178. // console.log(added_by_el);
  179.  
  180. // FIND ADDED DATE
  181. // added_date = FindElement(".//div[2]/div[1]/div[2]/abbr", profile_el).title;
  182. added_date = added_by[2];
  183. res += added_date+separator+"\n";
  184. // console.log("DATE="+added_date);
  185. if (counter === amount){
  186. return saveAndShow(res, counter, separator, isMembersPage)
  187.  
  188. }
  189. }
  190. }
  191. }
  192. if (counter < amount){
  193. res = "";
  194. setTimeout(scroll, 2000);
  195. }
  196. else{
  197. return saveAndShow(res, counter, separator, isMembersPage)
  198. }
  199. }
  200. else {
  201. res = "This is not Facebook Group Members page("
  202. isMembersPage = false;
  203. return res;
  204. }
  205.  
  206. // return res;
  207. }
  208.  
  209. function FBPharseGroupMembers(document_root) {
  210. var res = setTimeout(parse, 2000);
  211. res = "Parsing..."
  212. console.log(res)
  213.  
  214. console.log("END!");
  215. return res;
  216. // var separator = ";";
  217. // var res = 'Name'+separator+'Added By'+separator+'Date of joining'+separator+'\n';
  218. // var counter = 0;
  219. // console.log('Start');
  220.  
  221. // var isMembersPage = true;
  222.  
  223. // // var scroller_el = FindElement("//div[contains(@class, 'uiMorePager')]/div/a", document);
  224. // // <div class="profileBrowserGrid expandedList fbProfileBrowserNoMoreItems">
  225.  
  226. // var cont_el = FindElement("(//div[contains(@class,'fbProfileBrowserList') and contains(@class,'fbProfileBrowserListContainer')])[last()]", document);
  227. // if (cont_el) {
  228. // console.log(cont_el);
  229. // var table_list = FindElements(".//ul", cont_el);
  230. // console.log("TablesCount="+table_list.length);
  231.  
  232. // for (var i = 0, ilen = table_list.length; i < ilen; i++) {
  233. // var table_el = table_list[i];
  234. // if (table_el) {
  235. // var trs_list = FindElements(".//div[contains(@data-name,'GroupProfileGridItem')]", table_el);
  236. // // console.log(trs_list)
  237. // console.log("Table="+i);
  238. // for (var y = 0, ylen = trs_list.length; y < ylen; y++) {
  239. // var el = trs_list[y];
  240. // // console.log(el)
  241.  
  242. // if (el.innerHTML === "")
  243. // break; // Skip empty element
  244.  
  245. // counter += 1;
  246. // var profile_el = FindElement(".//div[contains(@class,'uiProfileBlockContent')]", el);
  247. // // console.log(profile_el);
  248.  
  249. // // FIND NAME
  250. // var name = FindElement(".//div/div[2]/div/a", profile_el).text;
  251. // console.log(name)
  252. // res += name+separator;
  253. // // console.log("NAME="+name);
  254.  
  255. // // FIND ADDED BY
  256. // var added_by_el_tmp = FindElement(".//div/div[2]", profile_el);
  257. // // console.log(added_by_el_tmp)
  258. // var addedInfEl = FindElement(".//div/div[2]/div[2]", profile_el)
  259. // // console.log(addedInfEl)
  260. // var added_by_el_count = added_by_el_tmp.childElementCount;
  261. // if (added_by_el_count === 3) {
  262. // // var added_by_el = FindElement(".//div[2]/div", added_by_el_tmp);
  263. // var added_by_el = FindElement(".//div[2]", added_by_el_tmp); // FIXED
  264. // console.log(added_by_el)
  265. // } else {
  266. // console.log(added_by_el_count)
  267. // var added_by_el = FindElement(".//div[3]", added_by_el_tmp);
  268. // console.log("error break")
  269. // }
  270.  
  271. // // added_by_el = added_by_el_tmp // error string
  272. // // console.log(added_by_el);
  273. // var added_by = GetTextOnly(added_by_el);
  274. // if (added_by[1])
  275. // res += added_by[0]+separator;
  276. // else
  277. // res += "Unknown"+separator;
  278. // // console.log(added_by_el);
  279.  
  280. // // FIND ADDED DATE
  281. // // added_date = FindElement(".//div[2]/div[1]/div[2]/abbr", profile_el).title;
  282. // added_date = added_by[2];
  283. // res += added_date+separator+"\n";
  284. // // console.log("DATE="+added_date);
  285. // }
  286. // }
  287. // }
  288. // res += separator+"\nEnd of results, total members = "+counter+"\n";
  289. // } else {
  290. // res = "This is not Facebook Group Members page("
  291. // isMembersPage = false;
  292. // }
  293.  
  294. // // Save CSV
  295. // filename = 'data_' + Date.now();
  296. // SaveToCSV(res, filename, isMembersPage);
  297.  
  298. // console.log("END!");
  299.  
  300. // return res;
  301. }
  302.  
  303. // chrome.runtime.sendMessage({
  304. // action: "FBgetGroupMembers",
  305. // source: FBPharseGroupMembers(document)
  306. // });
Advertisement
Add Comment
Please, Sign In to add comment