Cara Menggunakan Proxy Dengan Puppeteer - CRUDPRO

Cara Menggunakan Proxy Dengan Puppeteer

Cara Menggunakan Proxy Dengan Puppeteer

Puppeteer adalah API tingkat tinggi untuk chrome headless. Ini adalah salah satu alat paling populer yang digunakan untuk otomatisasi web atau scraping web di Node.js. Dalam scraping web, banyak pengembang menggunakannya untuk menangani rendering JavaScript dan ekstraksi data web. Artikel ini menjelaskan cara menyiapkan proxy di puppeteer dan opsi untuk memutar proxy.

Puppeteer Dan Proxy

Di bagian ini, Anda akan mengkonfigurasi puppeteer untuk menggunakan proxy. Ini memerlukan proxy yang valid dan URL tujuan untuk mengirim request.

'use strict';const puppeteer = require('puppeteer'); (async() => {
  const browser = await puppeteer.launch({
 
     args: [ '--proxy-server=http://10.10.10.10:8000' ]
  
  });
  const page = await browser.newPage();
  await page.goto('http://toscrape.com');
  await browser.close(); 
})();

Ini semudah itu. Kode ini memastikan bahwa semua request melalui proxy yang ditentukan. Salah satu kelemahan dari puppeteer adalah Anda tidak dapat dengan mudah menentukan proxy untuk setiap request. Oleh karena itu, proxy yang ditentukan akan digunakan untuk semua request di instance browser.

Rotasi IP Oleh Puppeteer

Jika Anda scrape web dalam skala besar, Anda perlu memutar proxy untuk menghindari larangan. Jika Anda menerapkan kumpulan IP Anda sendiri di puppeteer, Anda akan menemukan bahwa Anda hanya dapat mengonfigurasi proxy di tingkat browser (kode di atas), bukan berdasarkan request. Ini tidak ideal jika Anda perlu menggunakan proxy yang berbeda untuk setiap request. Untuk informasi lebih lanjut tentang topik ini, lihat masalah Github ini.

Untuk memutar proxy di puppeteer dan menggunakan alamat IP yang berbeda untuk setiap request, Anda memerlukan server proxy. Untuk menggunakan server proxy, implementasikan server Anda sendiri atau gunakan layanan BackConnect Proxy. Ingatlah bahwa mengimplementasikan server proxy Anda sendiri memerlukan pemecahan masalah yang tidak ada hubungannya dengan scraping web dan dapat mengalihkan perhatian Anda dari apa yang benar-benar ingin Anda capai (mengekstrak data). Oleh karena itu, kami tidak merekomendasikannya. Tetapi jika Anda memutuskan untuk melakukan ini, ini adalah contoh yang dibuat dalam rantai proxy.

const proxies = {
  'useragent1': 'http://user:[email protected]:44959,
  'useragent2': 'http://user:[email protected]:43379,
  'useragent3': 'http://user:[email protected]:39168, 
}; const server = new ProxyChain.Server({
  port: 8000,
  prepareRequestFunction: ({request}) => {
  const userAgent = request.headers['user-agent'];
  const proxy = proxies[userAgent];
  return {
  upstreamProxyUrl: proxy,
  };
 });
}); server.listen(() => console.log('Proxy server works!));

puppeteer dengan Zyte Smart Proxy Manager (sebelumnya Crawlera)

Jika Anda tidak ingin mengimplementasikan server proxy JS Anda sendiri, Anda dapat menggunakan layanan proxy rotasi seperti Zyte SmartProxyManager. Ini adalah cara termudah untuk menggunakan proxy dengan puppeteer. Jika Anda tidak ingin bersusah payah dengan rotasi IP dan ingin request Anda berhasil: Berikut cara menggunakan puppeteer dengan ZyteProxyManager:

Catatan: Sebaiknya gunakan Puppeteer 1.17 dengan Chromium 76.0.3803.0. Untuk versi puppeteer yang lebih baru, snapshot Chromium terbaru yang tersedia adalah r669921.

  • Setel abaikanHTTPSErrors menjadi true dalam metode puppeteer.launch
  • Tentukan Zyte Proxy Manager host dan port dalam -proxy-server flag
  • Kirim kredensial ZyteProxyManager di Proxy-Authorization header

Berikut ini contohnya:

const puppeteer = require('puppeteer');
(async () => {
     const browser = await puppeteer.launch({
        ignoreHTTPSErrors: true,
        args: [
            '--proxy-server=proxy.crawlera.com:8010'
        ]
     });
     const page = await browser.newPage();
  
     await page.setExtraHTTPHeaders({
         'Proxy-Authorization': 'Basic ' + Buffer.from(':').toString('base64'),
     });
 
     console.log('Opening page ...');
     try {
         await page.goto('https://httpbin.scrapinghub.com/redirect/6', {timeout: 180000});
     } catch(err) {
         console.log(err);
     }
     console.log('Taking a screenshot ...');
     await page.screenshot({path: 'screenshot.png'});
     await browser.close(); 
})();

Dengan Zyte Smart Proxy Manager, Anda tidak perlu khawatir tentang IP atau rotasi. Zyte Proxy Manager menangani request yang berhasil. Untuk tips tentang cara menggunakan Zyte Smart Proxy Manager dengan Puppeteer. Klik di sini jika Anda ingin mencobanya secara gratis!