Skip to content
Intermediate / 4 min read

ProxyScrape + Puppeteer: Cara Mengarahkan Scraper Node.js Melalui Proxy HTTP dan SOCKS5

Panduan langkah demi langkah untuk mengonfigurasi proxy residensial dan datacenter ProxyScrape di Puppeteer, termasuk autentikasi untuk proxy HTTP dan relay lokal untuk SOCKS5.

Windows macOS Linux Web Scraping

Gambaran Umum

Puppeteer adalah pustaka Node.js yang mengendalikan Chrome atau Chromium headless. Saat melakukan scraping dalam skala besar, mengarahkan permintaan melalui proxy sangat penting untuk menghindari blokir IP dan mengakses konten yang dibatasi secara geografis. Tutorial ini menunjukkan cara mengonfigurasi proxy residensial dan datacenter ProxyScrape di Puppeteer untuk protokol HTTP dan SOCKS5. Karena Chromium tidak mendukung proxy SOCKS5 terautentikasi secara langsung, Anda juga akan mempelajari cara menyiapkan relay lokal menggunakan gost untuk menjembatani autentikasi HTTP ke SOCKS5.

Prasyarat

  • Node.js 18 atau lebih baru yang terpasang di Windows, macOS, atau Linux.
  • Akun ProxyScrape dengan proxy residensial atau datacenter. Catat host, port, nama pengguna, dan kata sandi proxy Anda dari dasbor ProxyScrape.
  • Pemahaman dasar tentang JavaScript dan baris perintah.

Langkah 1: Siapkan proyek Node.js baru

  1. Buat direktori baru dan inisialisasi proyek:
    mkdir puppeteer-proxyscrape && cd puppeteer-proxyscrape
    npm init -y
    
  2. Instal Puppeteer:
    npm install puppeteer
    
    Ini mengunduh build Chromium yang kompatibel.

Langkah 2: Konfigurasikan proxy HTTP dengan autentikasi

Proxy HTTP ProxyScrape mendukung autentikasi nama pengguna/kata sandi. Puppeteer dapat memberikan kredensial proxy menggunakan metode page.authenticate().

Buat file bernama http-proxy.js:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    headless: true,
    args: [
      '--proxy-server=http://proxy.proxyscrape.com:12345' // Ganti dengan host dan port ProxyScrape Anda
    ]
  });

  const page = await browser.newPage();

  // Ganti dengan nama pengguna dan kata sandi ProxyScrape Anda
  await page.authenticate({
    username: 'your-username',
    password: 'your-password'
  });

  await page.goto('https://httpbin.org/ip', { waitUntil: 'networkidle2' });
  const content = await page.content();
  console.log(content);

  await browser.close();
})();

Jalankan skrip:

node http-proxy.js

Output harus menunjukkan IP proxy, yang mengonfirmasi pengaturan.

Langkah 3: Rotasi proxy HTTP per permintaan

Untuk scraping besar, rotasi proxy untuk setiap halaman atau permintaan. Pertahankan array proxy dan pilih satu secara acak atau berurutan.

const proxies = [
  { host: 'proxy1.proxyscrape.com', port: 12345, username: 'user', password: 'pass' },
  { host: 'proxy2.proxyscrape.com', port: 12345, username: 'user', password: 'pass' }
];

function getRandomProxy() {
  return proxies[Math.floor(Math.random() * proxies.length)];
}

(async () => {
  const proxy = getRandomProxy();
  const browser = await puppeteer.launch({
    args: [`--proxy-server=http://${proxy.host}:${proxy.port}`]
  });
  const page = await browser.newPage();
  await page.authenticate({ username: proxy.username, password: proxy.password });
  await page.goto('https://httpbin.org/ip');
  // ...
  await browser.close();
})();

Jika paket ProxyScrape Anda menyediakan endpoint berotasi (satu host:port yang merotasi IP per permintaan), gunakan itu alih-alih mengelola daftar.

Langkah 4: Gunakan proxy SOCKS5 melalui relay lokal

Chromium mendukung proxy SOCKS5 tetapi tidak mendukung autentikasi nama pengguna/kata sandi untuk itu. Untuk menggunakan proxy SOCKS5 ProxyScrape dengan autentikasi, jalankan relay lokal yang menerima HTTP tanpa autentikasi dan meneruskan ke proxy SOCKS5 terautentikasi.

  1. Instal gost (relay proxy sederhana). Di macOS dengan Homebrew:

    brew install gost
    

    Di Linux, unduh binary dari halaman rilis gost. Di Windows, unduh .exe dari halaman yang sama.

  2. Mulai gost dengan listener HTTP dan forwarder SOCKS5:

    gost -L http://:8080 -F socks5://your-username:[email protected]:1080
    

    Ganti nama pengguna, kata sandi, host, dan port dengan detail SOCKS5 ProxyScrape Anda.

  3. Arahkan Puppeteer ke relay HTTP lokal:

    const browser = await puppeteer.launch({
      args: ['--proxy-server=http://127.0.0.1:8080']
    });
    

    Tidak perlu page.authenticate() karena relay lokal menangani autentikasi.

  4. Uji dengan pemeriksaan httpbin.org/ip yang sama.

Langkah 5: Verifikasi bahwa proxy berfungsi

Gunakan layanan echo IP yang andal untuk mengonfirmasi bahwa proxy aktif dan tidak membocorkan IP asli Anda:

await page.goto('https://api.ipify.org?format=json');
const body = await page.evaluate(() => document.body.innerText);
console.log(JSON.parse(body).ip);

Bandingkan IP yang dikembalikan dengan IP Anda yang sebenarnya.

Pemecahan Masalah

  • 407 Proxy Authentication Required: Pastikan page.authenticate() dipanggil sebelum page.goto(). Untuk SOCKS5, konfirmasi kredensial relay sudah benar.
  • ERR_PROXY_CONNECTION_FAILED: Periksa host dan port proxy. Untuk SOCKS5, pastikan relay gost berjalan dan dapat dijangkau.
  • Kesalahan SSL: Beberapa proxy mungkin tidak mendukung tunneling HTTPS. Gunakan proxy HTTP untuk target HTTPS, atau verifikasi bahwa proxy SOCKS5 Anda mendukung CONNECT.
  • Respons lambat: Proxy residensial bisa lebih lambat. Tingkatkan timeout dengan page.setDefaultNavigationTimeout(60000).
  • IP tidak berubah: Jika menggunakan daftar proxy statis, konfirmasi logika rotasi. Jika menggunakan endpoint berotasi, periksa bahwa rotasi ProxyScrape diaktifkan di dasbor Anda.

Ringkasan

Anda telah berhasil mengonfigurasi proxy HTTP dan SOCKS5 ProxyScrape dengan Puppeteer. Untuk proxy HTTP, gunakan --proxy-server dan page.authenticate(). Untuk SOCKS5, jalankan relay lokal dengan gost untuk menangani autentikasi. Rotasi proxy per permintaan untuk mendistribusikan lalu lintas dan menghindari blokir. Selalu verifikasi IP keluar Anda sebelum memulai scraping besar.