Konuyu Açan
#0
Puppeteer, Node.js ortamında başlatılan ve Chrome tarayıcısını kontrol eden bir kütüphanedir. Web scraping, otomasyon ve test senaryoları için oldukça kullanışlıdır. Bu makalede, Puppeteer kullanarak toplu istek atma (batch request) işlemini gerçekleştirecek ve DOM yüklenme ve element bulamama sorunlarını nasıl yöneteceğimizi ele alacağız.
1. Toplu İstek Atma
Puppeteer ile birden fazla URL'ye aynı anda istek atmak, performans açısından önemlidir. Bunun için
Bu örnekte, üç farklı URL'ye aynı anda istek gönderiyoruz ve sonuçları topluyoruz.
2. DOM Yüklenme Sorunu
Bir sayfa yüklendiğinde, tüm DOM elemanlarının yüklenmesi zaman alabilir. Eğer belirli bir elemanı bulamazsak, bu durum genellikle sayfanın tam olarak yüklenmemesinden kaynaklanır. Bu tür durumları yönetmek için
Bu yapı ile, belirli bir süre içerisinde eleman yüklenmezse hata yönetimi yaparak kullanıcıyı bilgilendirebiliriz.
3. Element Bulamama Sorunu Yönetimi
Element bulamama durumunda yapılabilecek en iyi uygulamalardan biri, hata yönetimi ve yeniden deneme mekanizmasıdır. Örneğin, belirli bir sayfa için bir element yüklenemediğinde, belirli bir süre bekleyip tekrar deneyebiliriz:
Bu yöntem, geçici ağ sorunları veya sayfanın yavaş yüklenmesi gibi durumlarda yardımcı olacaktır.
Sonuç olarak, Puppeteer ile toplu istek atmak ve DOM yüklenme ile element bulamama sorunlarını yönetmek, dikkatli bir yapılandırma ile oldukça verimli bir şekilde gerçekleştirilebilir. Bu tür tekniklerin kullanımı, otomasyon süreçlerinizi daha sağlam ve güvenilir hale getirecektir.
1. Toplu İstek Atma
Puppeteer ile birden fazla URL'ye aynı anda istek atmak, performans açısından önemlidir. Bunun için
Promise.all() yapısını kullanarak birden fazla sayfayı paralel olarak açabiliriz. Aşağıda bu işlemi gerçekleştiren bir örnek kod yer almaktadır:CODE
12345678910111213141516171819
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
const urls = ['https://example.com', 'https://example.org', 'https://example.net'];
const requests = urls.map(async (url) => {
await page.goto(url);
const content = await page.content(); // Sayfanın HTML içeriğini al
return content;
});
const results = await Promise.all(requests);
console.log(results); // Her sayfanın HTML içeriği
await browser.close();
})();
Bu örnekte, üç farklı URL'ye aynı anda istek gönderiyoruz ve sonuçları topluyoruz.
2. DOM Yüklenme Sorunu
Bir sayfa yüklendiğinde, tüm DOM elemanlarının yüklenmesi zaman alabilir. Eğer belirli bir elemanı bulamazsak, bu durum genellikle sayfanın tam olarak yüklenmemesinden kaynaklanır. Bu tür durumları yönetmek için
page.waitForSelector() fonksiyonunu kullanarak belirli bir elemanın yüklenmesini bekleyebiliriz:CODE
12345678910
await page.goto(url);
await page.waitForSelector('#target-element', { timeout: 5000 })
.then(() => {
// Eleman bulundu, işlem yapabilirsiniz.
})
.catch(() => {
// Eleman bulunamadı, hata yönetimi
console.error('Eleman yüklenemedi.');
});
Bu yapı ile, belirli bir süre içerisinde eleman yüklenmezse hata yönetimi yaparak kullanıcıyı bilgilendirebiliriz.
3. Element Bulamama Sorunu Yönetimi
Element bulamama durumunda yapılabilecek en iyi uygulamalardan biri, hata yönetimi ve yeniden deneme mekanizmasıdır. Örneğin, belirli bir sayfa için bir element yüklenemediğinde, belirli bir süre bekleyip tekrar deneyebiliriz:
CODE
12345678910111213141516
const retryOperation = async (page, url, retries = 3) => {
await page.goto(url);
for (let i = 0; i < retries; i++) {
try {
await page.waitForSelector('#target-element', { timeout: 5000 });
// Eleman bulundu, işlem yapın
break;
} catch {
console.warn([icode]Deneme ${i + 1}: Eleman bulunamadı, tekrar denenecek...[/icode]);
await page.waitForTimeout(2000); // 2 saniye bekle
}
}
};
await retryOperation(page, url);
Bu yöntem, geçici ağ sorunları veya sayfanın yavaş yüklenmesi gibi durumlarda yardımcı olacaktır.
Sonuç olarak, Puppeteer ile toplu istek atmak ve DOM yüklenme ile element bulamama sorunlarını yönetmek, dikkatli bir yapılandırma ile oldukça verimli bir şekilde gerçekleştirilebilir. Bu tür tekniklerin kullanımı, otomasyon süreçlerinizi daha sağlam ve güvenilir hale getirecektir.