forked from Zubdata/Google-Maps-Scraper
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcontentScript.js
More file actions
20 lines (20 loc) · 8.66 KB
/
Copy pathcontentScript.js
File metadata and controls
20 lines (20 loc) · 8.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var auto_extract_flag=!1,leads=[],leads_lnglat=new Set,collect_email=!0;
(()=>{var a=document.createElement("div");a.className="extension_gms_page";var e=document.createElement("h1");e.id="extension_gms_leads_info";e.innerHTML="DayLink Leads: 0";const f=document.createElement("button");f.className="extension_gms_button";f.innerText="Start Auto Extract";f.id="extension_gms_start_btn";f.addEventListener("click",async g=>{g=g.target;if(auto_extract_flag)g.innerText="Start Auto Extract",auto_extract_flag=!1,console.log("Begin to stop auto extract!");else{g.innerText="Stop Auto Extract";
g.style="background-color: #ea4335";auto_extract_flag=!0;console.log("Begin to start auto extract!");document.getElementById("searchbox-searchbutton").click();await new Promise(p=>setTimeout(p,3E3));var k=document.querySelector('[role="feed"]'),m=0,t=-1;do{console.log("Paging");k.scrollTop=k.scrollHeight;await new Promise(p=>setTimeout(p,1E3*Math.floor(3*Math.random()+1)));if(0<document.getElementsByClassName("HlvSq").length){console.log("No more results.");break}t==k.scrollHeight?m++:(m=0,t=k.scrollHeight);
if(20<m){console.log("Feed list not change for 20 times.");break}console.log(m,k.scrollTop,k.scrollHeight)}while(auto_extract_flag);g.innerText="Start Auto Extract";g.style="";auto_extract_flag=!1;console.log("Finish auto extract!")}});const d=document.createElement("button");d.className="extension_gms_button";d.innerText="Export Leads (0)";d.id="extension_gms_download_btn";d.style="background-color: #54aced";d.addEventListener("click",async()=>{chrome.runtime.sendMessage({action:"openPage",data:leads});
console.log("leads: ",leads)});const l=document.createElement("button");l.className="extension_gms_button";l.innerText="Clear";l.id="extension_gms_clear_btn";l.style="background-color: #4167b2";l.addEventListener("click",async()=>{window.leads=[];window.leads_lnglat.clear();e.innerHTML="DayLink Leads: 0";d.innerText="Export Leads (0)"});a.appendChild(e);a.appendChild(f);a.appendChild(d);a.appendChild(l);setInterval(()=>{const g=document.getElementsByClassName("w6VYqd")[0];g&&!g.contains(a)&&(g.appendChild(a),
console.log("Button inserted successfully"))},2E3)})();function decode_cf_email(a){s="";r=parseInt(a.substr(0,2),16);for(j=2;a.length-j;j+=2)c=parseInt(a.substr(j,2),16)^r,s+=String.fromCharCode(c);return s}
function get_domain(a){const e=new Set("ac ad ae af ag ai al am an ao aq ar as at au aw ax az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cd cf cg ch ci ck cl cm cn co cr cu cv cw cx cy cz de dj dk dm do dz ec ee eg eh er es et eu fi fj fk fm fo fr ga gb gd ge gf gg gh gi gl gm gn gp gq gr gs gt gu gw gy hk hm hn hr ht hu id ie il im in io iq ir is it je jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md me mf mg mh mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nc ne nf ng ni nl no np nr nu nz om pa pe pf pg ph pk pl pm pn pr ps pt pw py qa re ro rs ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr ss st su sv sx sy sz tc td tf tg th tj tk tl tm tn to tr tt tv tw tz ua ug uk us uy uz va vc ve vg vi vn vu wf ws xk ye yt za zm zw".split(" "));a=
(new URL(a)).host.toLowerCase().split(".");return e.has(a[a.length-1])?a[a.length-3]:a[a.length-2]}
function normalize_social_link(a){try{a.startsWith("//")&&(a="https:"+a);a.startsWith("http")||(a="https://"+a);const e=new Set("/reel /about /tr /privacy /download /pg /settings /vp /profiles".split(" "));let f=new URL(a);if("http:"===f.protocol||""===f.protocol)f.protocol="https:";"instagram.com"===f.host&&(f.host="www.instagram.com");"facebook.com"===f.host&&(f.host="www.facebook.com");"yelp.com"===f.host&&(f.host="www.yelp.com");"www.twitter.com"===f.host&&(f.host="twitter.com");"/"===f.pathname[f.pathname.length-
1]&&(f.pathname=f.pathname.slice(0,-1));return e.has(f.pathname)?"":f.toString()}catch(e){console.warn("normalize_social_link error: ",a,e)}return""}
async function extractemail(a,e,f){try{a.startsWith("//")&&(a="https:"+a);a.startsWith("http")||(a="https://"+a);const v=await chrome.runtime.sendMessage({action:"access",data:{url:a}});if(10>v.length)console.warn("visit error: ",a);else{var d=v.normalize("NFKC");e={instagram:/(((http|https):\/\/)?((www\.)?(?:instagram.com|instagr.am)\/([A-Za-z0-9_.]{2,30})))/ig,facebook:/(?:https?:)?\/\/(?:www\.)?(?:facebook|fb)\.com\/((?![A-z]+\.php)(?!marketplace|gaming|watch|me|messages|help|search|groups)[A-z0-9_\-\.]+)\/?/ig,
youtube:/(?:https?:)?\/\/(?:[A-z]+\.)?youtube\.com\/(channel\/([A-z0-9-_]+)|user\/([A-z0-9]+))\/?/ig,linkedin:/(?:https?:)?\/\/(?:[\w]+\.)?linkedin\.com\/((company|school)\/[A-z0-9-\u00c0-\u00ff\.]+|in\/[\w\-_\u00c0-\u00ff%]+)\/?/ig,twitter:/(?:(?:http|https):\/\/)?(?:www.)?(?:twitter.com)\/(?!(oauth|account|tos|privacy|signup|home|hashtag|search|login|widgets|i|settings|start|share|intent|oct)(['"\?\.\/]|$))([A-Za-z0-9_]{1,15})/igm,email:/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi,yelp:/https?:\/\/(www\.)?yelp\.com\/biz\/[a-zA-Z0-9_-]+/ig};
var l=new Set,g={};for(const h in e){g[h]=new Set;var k=d.match(e[h]);k&&k.forEach(b=>{b&&("email"===h?g[h].add(b):(b=normalize_social_link(b))&&g[h].add(b))})}var m=new URL(a);try{var t=(new DOMParser).parseFromString(d,"text/html").querySelector(".__cf_email__");if(t){const h=t.getAttribute("data-cfemail");h&&g.email.add(decode_cf_email(h))}}catch(h){console.warn("DOMParser parsed error: ",a,h)}t=/<a\s+(?:[^>]*?\s+)?href=(["'])(.*?)\1/gi;k=[];for(var p;p=t.exec(d);)k.push((new URL(p[2],m)).toString());
d="/contact /contact-us /contact-me /about /about-me /about-us /team /our-team /meet-the-team /support /customer-service /feedback /help /sales privacy return location policy faq".split(" ");for(m=0;m<k.length;m++){var u=k[m];for(p=0;p<d.length;++p)if(u.includes(d[p])){l.add(u);break}}for(u=0;u<k.length;u++)try{const h=k[u];if(!h)continue;const b=(new URL(h)).host.toLowerCase();for(const q in e)if(b.includes(q)){if(0>=g[q].size){const n=normalize_social_link(h);n&&g[q].add(n)}break}}catch(h){console.warn(`error: ${k[u]}`,
h)}if(f&&0<l.size){const h=[...l].map(async b=>await extractemail(b,"",!1));(await Promise.all(h)).map(b=>{if(b)for(const q in b)b[q].forEach(n=>{g[q].add(n)})})}console.log("Email for : ",a,g,[...l].join());var w=new Set,x=new Set,A=".png .jpg .jpeg .gif .webp wixpress.com sentry.io noreply abuse no-reply subscribe mailer-daemon domain.com email.com yourname wix.com".split(" "),y=get_domain(a);g.email.forEach(h=>{h=h.replace("u003e","").toLowerCase();for(let b=0;b<A.length;++b)if(h.includes(A[b]))return;
w.add(h);y&&h.includes(y)&&x.add(h)});g.email=0<x.size?x:w;return g}}catch(v){console.log(`visit url error: ${a}`,v)}}async function findemails(a){const e=new URL(a);var f=[];"/contact /contact-us /contact-me /about /about-me /about-us /team /our-team /meet-the-team /support /customer-service /feedback /help /sales".split(" ").map(d=>{f.push((new URL(d,e)).toString())});a=f.map(async d=>await extractemail(d,""));return(await Promise.all(a)).filter(d=>d&&""!==d.trim()).join(",")}
window.addEventListener("message",async function(a){if(a.data&&"search"===a.data.type&&a.data.data){a=JSON.parse(a.data.data.replace('/*""*/',""));results=JSON.parse(a.d.slice(5));feed=results[64];a=[];for(let g=0;g<feed.length;++g)try{var e=feed[g][feed[g].length-1],f=e[11]||"";if(!f)continue;let k="";try{k=e[7][0]}catch(b){}let m="";try{m=e[178][0][0]}catch(b){}let t="";try{t=e[4][8]}catch(b){}let p="";try{p=e[4][7]}catch(b){}let u="";try{u=e[13].join(";")}catch(b){}let w="";try{w=e[78]}catch(b){}let x=
"";try{x=e[37][0][0][29][1]}catch(b){}let A=(e[2]||[]).join(","),y="",v="";try{y=e[9][2],v=e[9][3]}catch(b){}let h=[];var d={};try{const b=e[34][1],q=new Date;for(var l=0;l<b.length;l++){const n=b[l][0],z=b[l][1].join(", "),B=(q.getDay()+l)%7;h.push({day:n,hours:z,weekDay:B});d[n]||(d[n]={});d[n][B]||(d[n][B]=0);d[n][B]++}}catch(b){}l={};for(const b in d){let q=0,n=null;for(const z in d[b])d[b][z]>q&&(q=d[b][z],n=parseInt(z));null!==n&&(l[b]=n)}for(d=0;d<h.length;d++){const b=h[d];void 0!==l[b.day]&&
(b.weekDay=l[b.day])}h.sort((b,q)=>b.weekDay-q.weekDay);d={};for(const b of h)d[`${b.weekDay}_${b.day}`]=b.hours;leads_lnglat.has(w)||(leads_lnglat.add(w),a.push({name:f,phone:m,website:k,address:A,email:"",placeID:w,cID:x,category:u,reviewCount:t,averageRating:p,latitude:y,longitude:v,...d}))}catch(k){console.warn("Error processing item:",k)}e=a.map(async g=>{try{if(g.website&&collect_email){const k=await extractemail(g.website,g.name,!0);if(k)for(const m in k)g[m]=[...k[m]].join()}}catch(k){console.warn("collect email error: ",
g)}return g});e=await Promise.all(e);for(f=0;f<e.length;++f)leads.push(e[f]);console.log(leads);document.getElementById("extension_gms_download_btn").innerText=`Export Leads (${leads.length})`;document.getElementById("extension_gms_leads_info").innerHTML=`DayLink Leads: ${leads.length}`}});