Advertisement
myLoveOnlyForYou

Untitled

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