Rehber & Hazır Kod: Puppeteer ile Fiyat Takip Botu Yapımı - Baskı Önizleme
+- BotBB - Web Otomasyonu, Bot Mimarileri ve Scraping Topluluğu (
https://botbb.tr)
+-- Forum: Web & Tarayici Otomasyonlari (
https://botbb.tr/Forum-Web-Tarayici-Otomasyonlari)
+--- Forum: Fiyat ve Stok Takip Botlari (
https://botbb.tr/Forum-Fiyat-ve-Stok-Takip-Botlari)
+--- Konu Başlığı: Rehber & Hazır Kod: Puppeteer ile Fiyat Takip Botu Yapımı (
/Thread-Rehber-Haz%C4%B1r-Kod-Puppeteer-ile-Fiyat-Takip-Botu-Yap%C4%B1m%C4%B1)
Rehber & Hazır Kod: Puppeteer ile Fiyat Takip Botu Yapımı -
admin - 10-17-2026
Rehber & Hazır Kod: Puppeteer ile Fiyat Takip Botu Yapımı (Fiyat Düşünce Telegram'a Alarm Gönderen Senaryo)
Bir önceki konumuzda cep telefonumuza tek tıkla Telegram bildirimi atan hafif modülü kurmuştuk. Şimdi bu altyapıyı gerçek bir senaryoya bağlıyoruz:
Hedef bir e-ticaret sayfasındaki ürünün fiyatını belirli aralıklarla kontrol eden ve fiyat belirlediğimiz eşiğin altına indiğinde anında cep telefonumuza bildirim fırlatan bir fiyat takip botu.
Bu senaryoda bot; sayfayı açacak, fiyat etiketini okuyacak, metindeki gereksiz simgeleri temizleyip sayıya çevirecek ve fiyat düştüyse linkiyle birlikte Telegram'a mesaj atacaktır.
1. Gerekli Kütüphaneler
Boş bir klasör oluşturup terminal (CMD) üzerinden şu iki paketi kurun:
Kod:
npm install puppeteer axios
2. Hazır ve Çalışan Tam Kod (fiyat_takip.js)
Klasörünüzde
fiyat_takip.js dosyası oluşturun ve aşağıdaki kodları yapıştırın.
BOT_TOKEN ve
CHAT_ID alanlarına kendi bilgilerinizi girin:
Kod:
const puppeteer = require('puppeteer');
const axios = require('axios');
// --- AYARLAR ---
const TELEGRAM_BOT_TOKEN = 'BURAYA_BOT_TOKEN';
const TELEGRAM_CHAT_ID = 'BURAYA_CHAT_ID';
// Takip edilecek ürün bilgileri
const URUN_URL = 'https://www.hepsiburada.com/ornek-urun-linki-p-HBV00000XXXXX';
const HEDEF_FIYAT = 15000; // Bu fiyatın altına düşerse bildirim gelir (TL)
const KONTROL_PERIYODU_DAKIKA = 30; // Kaç dakikada bir kontrol edilsin?
/**
* Telegram'a HTML formatlı mesaj gönderir
*/
async function telegramBildir(mesaj) {
const url = `https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage`;
try {
await axios.post(url, {
chat_id: TELEGRAM_CHAT_ID,
text: mesaj,
parse_mode: 'HTML',
disable_web_page_preview: false
});
console.log(' Telegram bildirimi gönderildi!');
} catch (err) {
console.error('Telegram gönderim hatası:', err.message);
}
}
/**
* Sayfadaki fiyat metnini (örn: "14.499,90 TL") saf sayıya (14499.90) dönüştürür
*/
function fiyatiSayiyaCevir(fiyatMetni) {
if (!fiyatMetni) return null;
// Boşlukları, TL simgesini ve noktaları temizle, virgülü noktaya çevir
const temiz = fiyatMetni
.replace(/[^\d,\.]/g, '')
.replace(/\./g, '')
.replace(',', '.');
return parseFloat(temiz);
}
/**
* Puppeteer ile sayfayı ziyaret edip güncel fiyatı çeken ana fonksiyon
*/
async function fiyatiKontrolEt() {
console.log(`[${new Date().toLocaleTimeString('tr-TR')}] Fiyat kontrol ediliyor...`);
let browser = null;
try {
browser = await puppeteer.launch({
headless: 'new',
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-dev-shm-usage',
'--disable-gpu'
]
});
const page = await browser.newPage();
// Gerçekçi masaüstü User-Agent tanımlayarak bot tespitini azaltın
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36');
// Hız kazanmak ve RAM tüketmemek için gereksiz resim ve fontları engelleyin
await page.setRequestInterception(true);
page.on('request', (req) => {
if (['image', 'font', 'media'].includes(req.resourceType())) {
req.abort();
} else {
req.continue();
}
});
await page.goto(URUN_URL, { waitUntil: 'domcontentloaded', timeout: 35000 });
// Sayfadaki fiyat ve ürün başlığı seçicileri (Selector)
// NOT: İncele (Inspect) diyerek hedef sitenin etiket sınıfını buraya yazın
const veri = await page.evaluate(() => {
const baslik = document.querySelector('h1')?.innerText?.trim() || 'Ürün Başlığı Bulunamadı';
// Çoğu e-ticaret sitesinde fiyat içeren yaygın selector kalıpları
const fiyatElemani = document.querySelector('[data-test-id="price-current-price"]') ||
document.querySelector('.price') ||
document.querySelector('.product-price');
const fiyatHam = fiyatElemani ? fiyatElemani.innerText.trim() : null;
return { baslik, fiyatHam };
});
if (!veri.fiyatHam) {
console.log(' Fiyat etiketi sayfada bulunamadı! Selector değişmiş olabilir.');
return;
}
const guncelFiyat = fiyatiSayiyaCevir(veri.fiyatHam);
console.log(`Ürün: ${veri.baslik}`);
console.log(`Güncel Fiyat: ${guncelFiyat} TL | Hedef: ${HEDEF_FIYAT} TL`);
// FİYAT DÜŞTÜ MÜ KONTROLÜ
if (guncelFiyat && guncelFiyat <= HEDEF_FIYAT) {
const alarmMesaji = `
? <b>İNDİRİM ALARMI! FİYAT DÜŞTÜ</b> ?
━━━━━━━━━━━━━━━━━━━━
? <b>Ürün:</b> ${veri.baslik}
? <b>Eski / Hedef Fiyat:</b> ${HEDEF_FIYAT} TL
? <b>GÜNCEL FİYAT:</b> <b>${guncelFiyat} TL</b>
⏰ <b>Zaman:</b> ${new Date().toLocaleTimeString('tr-TR')}
━━━━━━━━━━━━━━━━━━━━
? <a href="${URUN_URL}">Ürüne Gitmek İçin Hemen Tıklayın</a>
`;
await telegramBildir(alarmMesaji);
} else {
console.log(' Fiyat henüz hedef seviyeye düşmedi.');
}
} catch (hata) {
console.error('Bot çalışma hatası:', hata.message);
} finally {
if (browser) {
await browser.close();
}
}
}
// Botu hemen bir kez çalıştır
fiyatiKontrolEt();
// Belirlenen dakika aralığıyla döngüye sok
setInterval(fiyatiKontrolEt, KONTROL_PERIYODU_DAKIKA * 60 * 1000);
3. Hedef Sitenin Fiyat Selector'ı Nasıl Bulunur?
Her sitenin fiyat alanı farklıdır. Kendi takip etmek istediğiniz sitede doğru yeri yakalamak için:
- Ürün sayfasına gidin, fiyatın üzerine Sağ Tık > İncele (Inspect) deyin.
- Açılan kod penceresinde fiyatı barındıran etiketin class veya id değerine bakın (Örn: class="price-value").
- Koddaki document.querySelector('.price') alanına o sınıfı yazmanız yeterlidir.
4. Arka Planda 7/24 Kesintisiz Çalıştırma (PM2 Taktigi)
Terminali kapattığınızda botun durmasını istemiyorsanız, küresel olarak
PM2 sürec yöneticisini kurup botu arka plana atabilirsiniz:
Kod:
npm install -g pm2
pm2 start fiyat_takip.js --name "fiyat-botu"
Artık bilgisayarınız veya sunucunuz açık olduğu sürece terminal penceresi kapalı olsa bile bot sessizce 30 dakikada bir kontrolü yapar, fiyat düştüğü anda telefonunuzu çaldırır.
Alıntı:Geliştirme Önerisi: Birden fazla ürünü takip etmek isterseniz kodun başındaki URUN_URL alanını bir dizi (array) haline getirip sırayla tüm linkleri döngüyle gezdirebilirsiniz.
Takip etmek istediğiniz sitede fiyatı yakalayamadığınız veya selector seçemediğiniz durumlar olursa sayfa linkini bu başlık altından paylaşın, birlikte bakalım!