Skip to content
Advanced / 5 min read

Web Scraping Tingkat Lanjut dengan Proxy Residensial ChangeMyIP dan Playwright

Gabungkan proxy residensial bergilir ChangeMyIP dengan Playwright untuk melakukan scraping situs web dinamis dalam skala besar. Tutorial tingkat lanjut ini mencakup rotasi IP per permintaan, penghindaran sidik jari browser, dan penanganan error yang tangguh.

SOCKS5 Web Scraping Privasi/Anonimitas

Ringkasan

Playwright adalah pustaka otomasi browser yang kuat yang mendukung Chromium, Firefox, dan WebKit. Jika digabungkan dengan proxy residensial ChangeMyIP, ia menjadi alat yang tangguh untuk web scraping tingkat lanjut, melewati pembatasan geografis dan batas laju. Tutorial ini mencakup penyiapan Playwright dengan proxy residensial bergilir ChangeMyIP, penerapan rotasi IP per permintaan, pengelolaan sidik jari browser, dan penanganan konten dinamis.

Prasyarat

  • Node.js 16+ dan npm
  • Akun ChangeMyIP dengan akses proxy residensial (atau datacenter jika Anda mau)
  • Pengetahuan dasar JavaScript/Node.js

Memahami Endpoint Proxy Residensial ChangeMyIP

ChangeMyIP menyediakan proxy residensial di lebih dari 40 negara. Anda dapat melakukan autentikasi menggunakan nama pengguna/kata sandi. Format endpoint untuk proxy HTTP adalah:

http://<username>:<password>@<proxy-host>:<port>

Untuk SOCKS5:

socks5://<username>:<password>@<proxy-host>:<port>

Ganti placeholder dengan kredensial dari dasbor ChangeMyIP Anda. Proxy residensial bergilir menetapkan IP baru per permintaan secara default, atau Anda dapat mempertahankan sesi sticky menggunakan ID sesi di nama pengguna (konsultasikan dokumentasi ChangeMyIP). Untuk tutorial ini, kami mengasumsikan mode bergilir.

Langkah 1: Siapkan Proyek Playwright

  1. Buat direktori baru dan inisialisasi npm:
mkdir changeMyIP-playwright-scraper
cd changeMyIP-playwright-scraper
npm init -y
  1. Instal Playwright dan dependensinya:
npm install playwright
npx playwright install

Langkah 2: Konfigurasikan Playwright untuk Menggunakan Proxy ChangeMyIP

Buat file scraper.js dan tambahkan kode berikut. Ini meluncurkan browser Chromium dengan proxy ChangeMyIP Anda:

const { chromium } = require('playwright');

const proxyUrl = 'http://username:password@proxy-host:port'; // Ganti dengan detail ChangeMyIP Anda

(async () => {
  const browser = await chromium.launch({
    proxy: {
      server: proxyUrl,
    },
  });
  const page = await browser.newPage();
  await page.goto('https://httpbin.org/ip');
  const content = await page.textContent('body');
  console.log(content);
  await browser.close();
})();

Jalankan dengan node scraper.js. Anda akan melihat IP proxy, bukan IP asli Anda.

Langkah 3: Terapkan Proxy Bergilir per Permintaan

Untuk scraping tingkat lanjut, Anda mungkin menginginkan IP baru untuk setiap halaman atau permintaan. Karena proxy residensial ChangeMyIP bergilir pada setiap permintaan secara default, Anda cukup membuat konteks browser baru untuk setiap tugas scraping. Jika Anda perlu memaksa IP baru, luncurkan instance browser baru atau gunakan sesi proxy baru.

Berikut fungsi yang melakukan scraping URL dengan IP baru setiap kali:

async function scrapeWithNewIP(url) {
  const browser = await chromium.launch({
    proxy: { server: proxyUrl },
  });
  const page = await browser.newPage();
  await page.goto(url, { waitUntil: 'networkidle' });
  const data = await page.evaluate(() => document.body.innerText);
  await browser.close();
  return data;
}

Panggil fungsi ini untuk setiap URL target. Untuk efisiensi, gunakan kembali browser dan buat konteks baru dengan proxy berbeda (jika paket Anda mengizinkan beberapa endpoint). Jika tidak, meluncurkan browser baru dapat diterima untuk skala sedang.

Langkah 4: Kelola Sidik Jari Browser untuk Menghindari Blokir

Sistem anti-bot mendeteksi otomasi. Acak properti browser per sesi. Playwright memungkinkan pengaturan user agent, viewport, zona waktu, dan lainnya. Gunakan pustaka seperti playwright-extra dengan puppeteer-extra-plugin-stealth (kompatibel dengan Playwright melalui playwright-extra). Atau atur header secara manual.

Contoh: luncurkan dengan user agent dan viewport kustom:

const browser = await chromium.launch({
  proxy: { server: proxyUrl },
});
const context = await browser.newContext({
  userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
  viewport: { width: 1920, height: 1080 },
  locale: 'en-US',
  timezoneId: 'America/New_York',
});

Rotasi user agent dari daftar untuk setiap sesi.

Langkah 5: Scrape Konten Dinamis dan Tangani Paginasi

Playwright menunggu elemen secara otomatis. Gunakan page.waitForSelector untuk konten dinamis. Untuk infinite scroll, gulir sampai tidak ada item baru yang dimuat.

Contoh: scrape judul produk dari halaman e-commerce dengan infinite scroll:

async function scrapeProducts(page) {
  await page.goto('https://example.com/products', { waitUntil: 'networkidle' });
  let previousHeight = 0;
  while (true) {
    const currentHeight = await page.evaluate(() => document.body.scrollHeight);
    if (currentHeight === previousHeight) break;
    previousHeight = currentHeight;
    await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
    await page.waitForTimeout(2000);
  }
  const products = await page.evaluate(() => {
    return Array.from(document.querySelectorAll('.product-title')).map(el => el.innerText);
  });
  return products;
}

Langkah 6: Terapkan Logika Percobaan Ulang dengan IP Baru

Saat permintaan gagal (misalnya, CAPTCHA, timeout), coba lagi dengan IP baru. Karena proxy bergilir mengubah IP per permintaan, mencoba ulang saja mungkin sudah cukup. Untuk sesi sticky, Anda dapat mengubah ID sesi.

async function scrapeWithRetry(url, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    const browser = await chromium.launch({ proxy: { server: proxyUrl } });
    try {
      const page = await browser.newPage();
      await page.goto(url, { timeout: 30000 });
      const data = await page.content();
      await browser.close();
      return data;
    } catch (error) {
      console.error(`Percobaan ${i + 1} gagal: ${error.message}`);
      await browser.close();
    }
  }
  throw new Error(`Gagal setelah ${maxRetries} percobaan ulang`);
}

Pemecahan Masalah

  • Error autentikasi: Periksa kembali nama pengguna dan kata sandi. Pastikan keduanya di-URL-encode jika mengandung karakter khusus.
  • Koneksi proxy ditolak: Verifikasi host dan port proxy. Periksa bahwa IP Anda ada di daftar putih jika menggunakan autentikasi IP (ChangeMyIP mendukung nama pengguna/kata sandi, jadi gunakan itu).
  • CAPTCHA atau blokir: Rotasi user agent dan tambahkan penundaan acak. Gunakan proxy residensial untuk tingkat keberhasilan yang lebih baik.
  • Performa lambat: Kurangi instance browser, gunakan mode headless, dan blokir sumber daya yang tidak perlu (gambar, CSS) dengan page.route.
  • Sesi sticky tidak berfungsi: Konsultasikan dokumentasi ChangeMyIP untuk format ID sesi yang benar di nama pengguna.

Ringkasan

Anda telah mempelajari cara mengintegrasikan proxy residensial ChangeMyIP dengan Playwright untuk web scraping tingkat lanjut. Dengan merotasi IP, mengelola sidik jari browser, dan menangani konten dinamis, Anda dapat melakukan scraping dalam skala besar sambil menghindari blokir. Ingatlah untuk menghormati ketentuan layanan situs web dan robots.txt. Jaringan proxy residensial ChangeMyIP menawarkan 40+ negara dan berbagai protokol, menjadikannya pilihan yang cocok untuk tugas-tugas ini.