Web Scraper for Marketplace Data Facebook

(function(){"use strict";const CONFIG={scanInterval:3e3,selectors:{productCard:"div.x9f619.x78zum5.x1r8uery.xdt5ytf.x1iyjqo2.xs83m0k",title:"span.x1lliihq.x6ikm8r.x10wlt62.x1n2onr6",price:"span.x193iq5w.xeuugli.x13faqbe.x1vvkbs",location:"span.x1lliihq.x6ikm8r.x10wlt62.x1n2onr6.xlyipyv.xuxw1ft",link:'a[href*="/marketplace/item/"]',sellerProfile:'a[href*="facebook.com/marketplace/profile"]',image:"img"}};let scrapedData=[];let isScraping=true;function scrapeProducts(){try{document.querySelectorAll(CONFIG.selectors.productCard).forEach(card=>{const productLink=card.querySelector(CONFIG.selectors.link)?.href||"N/A";const sellerLink=card.querySelector(CONFIG.selectors.sellerProfile)?.href||"N/A";const imageLink=card.querySelector(CONFIG.selectors.image)?.src||"N/A";const data={title:card.querySelector(CONFIG.selectors.title)?.innerText||"N/A",price:card.querySelector(CONFIG.selectors.price)?.innerText||"N/A",location:card.querySelector(CONFIG.selectors.location)?.innerText||"N/A",link:productLink,sellerProfile:sellerLink,image:imageLink,timestamp:(new Date).toISOString()};if(!scrapedData.some(item=>item.link===data.link)){scrapedData.push(data);updateCounter()}})}catch(e){console.error("Scraping error:",e)}}function createControlPanel(){const panel=document.createElement("div");panel.style=`position: fixed;bottom: 20px;right: 20px;background: rgba(40,40,40,0.9);color: #fff;padding: 15px;border-radius: 10px;z-index: 999999;font-family: 'Cairo', sans-serif;backdrop-filter: blur(5px);border: 1px solid #555;`;const counter=document.createElement("div");counter.id="scraperCounter";counter.textContent="المنتجات المجموعة: 0";const buttonStyle=`background: #2ecc71;color: white;border: none;padding: 10px 20px;margin: 10px 0;cursor: pointer;border-radius: 5px;font-size: 14px;text-align: center;width: 100%;`;const exportBtn=document.createElement("button");exportBtn.textContent="📥 تصدير البيانات";exportBtn.style=buttonStyle;exportBtn.onclick=exportData;const clearBtn=document.createElement("button");clearBtn.textContent="❌ مسح البيانات";clearBtn.style=`background: #e74c3c;color: white;border: none;padding: 10px 20px;margin: 10px 0;cursor: pointer;border-radius: 5px;font-size: 14px;text-align: center;width: 100%;`;clearBtn.onclick=()=>{scrapedData=[];updateCounter()};const socialButtonsDiv=document.createElement("div");socialButtonsDiv.style=`display: flex;justify-content: space-between;gap: 10px;`;const youtubeBtn=document.createElement("button");youtubeBtn.textContent="📺 اشترك في قناتنا على يوتيوب";youtubeBtn.style=`background: #FF0000;color: white;border: none;padding: 10px 20px;cursor: pointer;border-radius: 5px;font-size: 14px;width: 48%;`;youtubeBtn.onclick=()=>window.open("https://youtube.com/@hamzontech?si=_S2X2k18V4IeY13-","_blank");const instagramBtn=document.createElement("button");instagramBtn.textContent="📷 تابعنا على إنستقرام";instagramBtn.style=`background: #E1306C;color: white;border: none;padding: 10px 20px;cursor: pointer;border-radius: 5px;font-size: 14px;width: 48%;`;instagramBtn.onclick=()=>window.open("https://www.instagram.com/hamzon_tech?igsh=MWcydGZxM2huZjJuZQ==","_blank");socialButtonsDiv.appendChild(youtubeBtn);socialButtonsDiv.appendChild(instagramBtn);panel.appendChild(counter);panel.appendChild(exportBtn);panel.appendChild(clearBtn);panel.appendChild(socialButtonsDiv);document.body.appendChild(panel)}function exportData(){const csvContent=[["العنوان","السعر","الموقع","رابط المنتج","رابط البائع","رابط الصورة","الوقت"],...scrapedData.map(item=>[`"${item.title.replace(/"/g,'""')}"`,`"${item.price.replace(/"/g,'""')}"`,`"${item.location.replace(/"/g,'""')}"`,item.link,item.sellerProfile,item.image,item.timestamp])].map(row=>row.join(",")).join("\n");const blob=new Blob([csvContent],{type:"text/csv;charset=utf-8;"});const link=document.createElement("a");link.href=URL.createObjectURL(blob);link.download=`marketplace_data_${Date.now()}.csv`;link.click()}function updateCounter(){const counter=document.getElementById("scraperCounter");if(counter){counter.textContent=`المنتجات المجموعة: ${scrapedData.length}`}}const observer=new MutationObserver(mutations=>{if(isScraping){mutations.forEach(mutation=>{if(mutation.addedNodes.length>0){scrapeProducts()}})}});function init(){createControlPanel();observer.observe(document,{childList:true,subtree:true});setInterval(scrapeProducts,CONFIG.scanInterval);scrapeProducts()}setTimeout(init,3e3)})();
زر الذهاب إلى الأعلى