用於抓取 Facebook 群組成員並將其匯出到 CSV 檔案的腳本。此 Facebook 群組成員提取器在瀏覽器中運作,無需安裝擴充功能或使用代理程式。只需將腳本複製並貼上到 Chrome 控制台中即可。
前往 Facebook 群組頁面
開啟 Chrome 開發者控制台
複製 將以下程式碼貼到控制台中。它將新增一個「下載 0 個成員」按鈕。重要提示:在移動到「人員/成員」標籤之前複製/貼上
點選群組頁面的「人員」標籤
滾動以載入將被腳本抓取的新成員。按鈕計數器隨著新成員的刮除而增加。
完成後,點擊「下載 X 成員」按鈕下載產生的 CSV 文件
設定檔將保存在快取中,直到您點擊「重置」按鈕。由於此緩存,如果您的瀏覽器“崩潰”,提取的配置檔案仍然可用
閱讀我們的逐步指南,提取 Facebook 群組成員並尋找他們的 LinkedIn 個人資料
dist/main.min.js
var G=Object.defineProperty,Q=(e,t,n)=>t in e?G(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}): e[t]=n,M=(e,t,n)=>(Q(e,"符號"!=typeof t?t+"":t,n),n);函數ee(e,t) {for(var n="",r=0;r<t.length;r++)n+=函式(e){for(var t="",n=0;n<e.length;n++){var r=null===e[n]||"u"<e[n] 型? "":e[n].toString(),r=(r=e[n]instanceof Date?e[n] .toLocaleString():r).replace(/"/g,'""');0<n&&(t+=","),t+=r=0<=r.search(/("|,|n )/g)?'"'+r+'"':r}return t+``}(t[r]);var i=new Blob([n],{type:"text/csv;charset=utf- 8;"}),o=document.createElement("a");void 0!==o.download&&(i=URL.createObjectURL(i),o.setAttribute("href",i),o.setAttribute( "下載",e),document.body.appendChild(o),o.click(),document.body.removeChild(o))}const _=(t,e)=>e.some(e=>t instanceof e);let P,j;函數te(){返回P=P||[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction]}函數ne(){返回j=j||[IDBCursor.prototype.advance, IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey]}const D=新WeakMap,E=新WeakMap,b=新WeakMap;函數re(o){var e=新Promise((e,t)=>{const n=()=>{o.removeEventListener("成功",r),o.removeEventListener("錯誤",i)},r=()=>{e(h(o.結果)),n() },i=()=>{t(o.error),n()};o.addEventListener("成功",r),o.addEventListener("錯誤",i)});return b.set( e,o),e}函數ie(o){var e;D.has(o)||(e=new Promise((e,t)=>{const n=()=>{o.removeEventListener( "完成",r),o.removeEventListener("錯誤",i),o.removeEventListener("中止",i)},r=()=>{e(),n()},i=() =>{t(o.error||new DOMException("AbortError","AbortError")),n()};o.addEventListener("完成",r),o.addEventListener("錯誤",i), o.addEventListener("abort",i)}),D.set(o,e))}let C={get(e,t,n){if(e instanceof IDBTransaction){if("done"== =t)return D.get(e);if("store"===t)return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return h(e[t ])},set(e,t,n){return e[t]=n,!0},has(e,t){return e instanceof IDBTransaction&&("done"===t||"store"= ==t)||t in e}};函數K(e){C=e(C)}函數oe(t){return ne().includes(t)?function(...e){return t.apply(S(this),e),h(this.request)}:function(...e){return h(t.apply(S(this),e))}}function se(e) {return"function"==typeof e?oe(e):(e instanceof IDBTransaction&&ie(e),_(e,te())?new Proxy(e,C):e)}函數h(e){if (e instanceof IDBRequest)return re(e);if(E.has(e))return E.get(e);var t=se(e);return t!==e&&(E.set(e,t ) ),b.set(t,e)),t}const S=e=>b.get(e);函數ae(e,t,{阻塞:n,升級:r,阻塞:i,終止: o }={}){const s=indexedDB.open(e,t),a=h(s);return r&&s.addEventListener("upgradeneeded",e=>{r(h(s.result),e. oldVersion ,e.newVersion,h(s.transaction),e)}),n&&s.addEventListener("阻塞",e=>n(e.oldVersion,e.newVersion,e)),a.then(e=> { o&&e.addEventListener("關閉",()=>o()),i&&e.addEventListener("versionchange",e=>i(e.oldVersion,e.newVersion,e))}).catch(()= > {}),a}const ce=["get","getKey","getAll","getAllKeys","count"],de=["put","add","delete","clear" ] ,I=new Map;function R(e,t){if(e instanceof IDBDatabase&&!(t in e)&&"string"==typeof t){if(I.get(t))return I.get( t );const r=t.replace(/FromIndex$/,""),i=t!==r,o=de.includes(r);return r in(i?IDBIndex:IDBObjectStore).prototype&&(o | |ce.includes(r))?(e=async function(e,...t){e=this.transaction(e,o?"readwrite":"readonly");let n=e.store; return i&&(n=n.index(t.shift())),(await Promise.all([n[r](...t),o&&e.done]))[0]},I.set( t ,e),e):void 0}}K(r=>({...r,get:(e,t,n)=>R(e,t)||r.get(e,t , n),has:(e,t)=>!!R(e,t)||r.has(e,t)}));const le=["繼續","繼續PrimaryKey","前進"] ,V={},B=新的WeakMap,U=新的WeakMap,ue={get(e,t){if(!le.includes(t))return e[t];let n=V [t]; return n=n||(V[t]=function(...e){B.set(this,U.get(this)[t](...e))})}} ;非同步函數* fe(...e){let t=this;if(t=t IDBCursor 實例?t:await t.openCursor(...e)){t=t;var n=new Proxy(t ,ue);對於(U