Pengetahuan

Membuat Bot Sederhana dengan Puppeteer

Siap membuat bot web pertamamu? Yuk, selami Membuat Bot Sederhana dengan Puppeteer! Pahami dasar-dasar otomatisasi browser dan buat bot pencarianmu sendiri dengan Node.js dan Puppeteer!

Tata Bicara23 Agustus 2025

Puppeteer adalah library Node.js yang memungkinkan kita mengontrol browser Chrome atau Chromium secara terprogram. Ini sangat kuat untuk otomatisasi tugas-tugas web seperti web scraping, pengujian end-to-end, pembuatan PDF atau screenshot dari halaman web, dan tentu saja, membangun bot web.

Bot yang akan kita buat ini akan mensimulasikan interaksi pengguna manusia: membuka halaman web, memasukkan teks ke kolom pencarian, mengklik tombol, dan kemudian mengambil beberapa informasi dari halaman hasil. Ini adalah fondasi dasar untuk banyak bot web yang lebih kompleks.

Mengapa Menggunakan Puppeteer untuk Bot?

  • Otomatisasi Browser Nyata: Puppeteer mengontrol instance Chrome/Chromium yang sebenarnya (bisa dalam mode headless atau dengan UI terlihat), sehingga ia dapat mengeksekusi JavaScript, menangani AJAX request, dan berinteraksi dengan elemen dinamis persis seperti pengguna manusia. Ini memungkinkannya melewati banyak deteksi bot sederhana.

  • Kontrol Penuh: Anda memiliki kontrol granular atas navigasi, interaksi elemen, event, dan bahkan perilaku jaringan browser.

  • Kapasitas Headless: Ideal untuk menjalankan bot di server tanpa antarmuka grafis.

  • Ekosistem Node.js: Memanfaatkan kekuatan dan kecepatan Node.js, serta ekosistem package NPM yang luas.

Persiapan Awal

Sebelum memulai, pastikan Anda memiliki Node.js dan npm (Node Package Manager) terinstal di sistem Anda.

  1. Buat Direktori Proyek Baru:

    Bash
    mkdir my-puppeteer-bot
    cd my-puppeteer-bot
    
  2. Inisialisasi Proyek Node.js:

    Bash
    npm init -y
    

    Ini akan membuat file package.json.

  3. Instal Puppeteer:

    Bash
    npm install puppeteer
    

    Perintah ini akan menginstal library Puppeteer dan juga mengunduh browser Chromium yang kompatibel.

Membuat Bot Pencarian Sederhana

Mari kita buat bot yang akan membuka Google, mencari sesuatu, dan mencetak judul halaman hasilnya.

Kode Bot Anda (index.js)

Buat file baru bernama index.js di dalam direktori proyek Anda dan tambahkan kode berikut:

JavaScript

const puppeteer = require('puppeteer');

async function runGoogleSearchBot(query) {
    let browser; // Deklarasikan variabel browser di luar try block
    try {
        // 1. Luncurkan Browser
        // headless: true (default) akan menjalankan browser tanpa GUI terlihat.
        // headless: false akan membuka jendela browser yang bisa Anda lihat.
        browser = await puppeteer.launch({ headless: false, defaultViewport: null });
        const page = await browser.newPage(); // Buka tab/halaman baru

        console.log(`Navigasi ke Google.com...`);
        // 2. Navigasi ke URL
        await page.goto('https://www.google.com', { waitUntil: 'networkidle2' });
        // waitUntil: 'networkidle2' berarti Puppeteer akan menunggu
        // hingga tidak ada lagi request jaringan yang lebih dari 2 dalam 500ms.
        // Ini memastikan semua konten di halaman sudah termuat, termasuk JavaScript.

        // Opsional: Tangani pop-up cookie Google jika muncul
        try {
            console.log("Mencoba menerima pop-up cookie...");
            // ID tombol "Accept all" untuk cookie Google bisa berubah, sesuaikan jika perlu.
            const acceptButton = await page.waitForSelector('#L2AGLb', { timeout: 5000 });
            if (acceptButton) {
                await acceptButton.click();
                console.log("Pop-up cookie diterima.");
                await page.waitForTimeout(1000); // Beri waktu setelah klik
            }
        } catch (error) {
            console.log("Tidak ada pop-up cookie atau elemen tidak ditemukan dalam waktu singkat.");
            // Lanjutkan jika tidak ada pop-up atau tidak bisa diklik
        }

        console.log(`Memasukkan query pencarian: "${query}"`);
        // 3. Temukan elemen input pencarian dan masukkan teks
        // Menggunakan selector CSS untuk menemukan elemen input dengan atribut name="q"
        await page.type('textarea[name="q"]', query); // 'type' akan mengetik karakter satu per satu

        console.log("Mengklik tombol pencarian...");
        // 4. Tekan Enter untuk submit form, atau klik tombol
        // await page.click('input[name="btnK"]'); // Klik tombol Google Search (jika ada 2, ini yang pertama)
        await page.keyboard.press('Enter'); // Lebih reliable untuk submit form pencarian

        console.log("Menunggu hasil pencarian dimuat...");
        // 5. Tunggu navigasi ke halaman hasil pencarian
        await page.waitForNavigation({ waitUntil: 'networkidle2' });

        // 6. Ekstrak informasi dari halaman hasil
        const pageTitle = await page.title();
        console.log(`Judul Halaman Hasil: ${pageTitle}`);

        // Contoh lain: ambil judul link hasil pencarian pertama
        const firstResultTitle = await page.evaluate(() => {
            const resultLink = document.querySelector('div#search a h3'); // Selector CSS untuk judul hasil
            return resultLink ? resultLink.innerText : 'Tidak ditemukan judul hasil pertama.';
        });
        console.log(`Judul Hasil Pertama: ${firstResultTitle}`);

        console.log("Bot selesai.");

    } catch (error) {
        console.error('Terjadi kesalahan pada bot:', error);
    } finally {
        // 7. Tutup Browser
        if (browser) {
            await browser.close();
            console.log("Browser ditutup.");
        }
    }
}

// Jalankan bot dengan query yang Anda inginkan
runGoogleSearchBot('Puppeteer web scraping tutorial');

Penjelasan Kode

  • const puppeteer = require('puppeteer');: Mengimpor library Puppeteer.

  • puppeteer.launch({ headless: false, defaultViewport: null });: Meluncurkan browser Chromium.

    • headless: false: Ini penting jika Anda ingin melihat browser beraksi. Untuk produksi atau server, biasanya diatur ke true.

    • defaultViewport: null: Memungkinkan Puppeteer menggunakan viewport default browser, bukan ukuran tetap 800x600.

  • browser.newPage();: Membuat tab baru di browser.

  • page.goto(url, { waitUntil: 'networkidle2' });: Mengarahkan halaman ke URL yang ditentukan. waitUntil: 'networkidle2' adalah strategi wait yang bagus untuk memastikan semua resource penting telah dimuat.

  • page.waitForSelector('#L2AGLb', { timeout: 5000 });: Menunggu elemen dengan ID #L2AGLb muncul di DOM. Ini digunakan untuk pop-up cookie Google. timeout mencegah bot menunggu tanpa batas jika elemen tidak ada.

  • await page.type('textarea[name="q"]', query);: Menemukan elemen <textarea> dengan atribut name="q" (ini adalah kotak pencarian Google) dan mengetikkan teks query ke dalamnya.

  • await page.keyboard.press('Enter');: Mensimulasikan penekanan tombol Enter. Ini seringkali lebih andal daripada mengklik tombol submit yang mungkin memiliki selektor kompleks.

  • await page.waitForNavigation({ waitUntil: 'networkidle2' });: Menunggu navigasi ke halaman berikutnya selesai. Ini penting setelah mengirimkan formulir atau mengklik link.

  • const pageTitle = await page.title();: Mengambil judul halaman saat ini.

  • page.evaluate(() => { ... });: Ini adalah metode yang sangat kuat. Ia menjalankan fungsi JavaScript di konteks browser (di dalam halaman itu sendiri). Ini memungkinkan Anda menggunakan DOM API biasa (document.querySelector, innerText, dll.) untuk mengekstrak data.

  • browser.close();: Menutup browser dan semua tabnya. Penting untuk selalu menutup browser di blok finally untuk menghindari resource leak.

Cara Menjalankan Bot Anda

  1. Pastikan Anda berada di direktori proyek my-puppeteer-bot di terminal Anda.

  2. Jalankan skrip Node.js:

    Bash
    node index.js
    

Anda akan melihat jendela Chrome/Chromium terbuka, melakukan pencarian di Google, dan kemudian menutup. Output di konsol akan menunjukkan langkah-langkah yang dilakukan bot dan informasi yang diekstrak.

Ide untuk Pengembangan Bot Lebih Lanjut

  • Interaksi Lebih Kompleks:

    • Mengklik link bernomor halaman (pagination).

    • Mengisi formulir dengan banyak kolom.

    • Meng-handle pop-up atau modal.

    • Meng-upload file.

  • Penyimpanan Data:

    • Mengekstrak lebih banyak data dari hasil pencarian (deskripsi, URL, harga, dll.).

    • Menyimpan data ke file JSON, CSV, atau database.

  • Penanganan Error dan Edge Cases:

    • Menambahkan try-catch yang lebih spesifik untuk setiap langkah.

    • Menangani kasus di mana elemen tidak ditemukan.

    • Meng-handle rate limiting atau captcha dari website target (ini lebih kompleks).

  • Headless vs. Headful: Beralih antara mode headless (tanpa GUI) untuk performa di server dan mode headful (dengan GUI) untuk debugging.

  • Rotasi Proxy: Untuk scraping skala besar, menggunakan proxy untuk menghindari pemblokiran IP.

  • Membuat Fungsi Reusable: Mengorganisir kode ke dalam fungsi atau kelas untuk modularitas.

Puppeteer adalah tool yang luar biasa untuk membangun bot web karena kemampuannya yang unik untuk mengontrol browser nyata. Dengan sedikit kode, Anda dapat mengotomatiskan interaksi web yang kompleks, membuka pintu untuk berbagai aplikasi mulai dari web scraping hingga pengujian otomatis. Mulailah dengan bot sederhana ini, dan teruslah bereksperimen dengan fitur-fitur Puppeteer lainnya untuk membangun bot yang lebih canggih dan berguna!

Share:

0 Komentar

Artikel Terkait