Mengapa Puppeteer Membutuhkan Proxy
Proxy untuk Puppeteer memungkinkan alat ini terhubung melalui alamat IP yang berbeda, alih-alih selalu menggunakan alamat IP mesin yang menjalankannya. Hal ini berguna untuk tugas-tugas berbasis lokasi, pengujian, pemantauan, dan pekerjaan lain di mana sumber koneksi menjadi faktor penting.
Puppeteer tetap menangani tugas utamanya. Proxy yang menangani asal koneksi tersebut.
Apa yang terjadi tanpa proxy: pemblokiran IP, batasan laju, dan pembatasan geografis
Tanpa proxy, situs web akan terus mendeteksi alamat IP yang sama. Seiring meningkatnya aktivitas, alamat IP tersebut mungkin akan mencapai batas laju atau diblokir.
Lokasi juga bisa menjadi faktor penting. Halaman yang dibuka dari Jerman mungkin tidak menampilkan konten yang sama dengan halaman yang dibuka dari AS.
Proxy untuk Puppeteer memungkinkan Anda terhubung dari berbagai alamat IP dan lokasi sesuai kebutuhan.
Jenis proxy apa yang sebaiknya digunakan dengan Puppeteer
Jenis proxy yang tepat bergantung pada jenis tugasnya.
| Jenis proxy | Pengambilan data | Pengelolaan akun | Pengujian | Pemantauan |
|---|
| Residential | Cocok jika lokasi dan sumber IP menjadi pertimbangan | Berguna saat akun memerlukan IP residential | Cocok untuk pengujian berbasis lokasi | Berguna untuk memeriksa konten dari berbagai lokasi |
| ISP | Cocok saat diperlukan alamat IP yang stabil | Berguna untuk sesi yang lebih lama pada satu alamat IP | Cocok untuk pengujian dengan alamat IP yang konsisten | Berguna untuk pemeriksaan berkelanjutan dari alamat IP yang sama |
| Pusat Data | Cocok untuk kecepatan dan volume permintaan yang lebih besar | Lebih baik saat alamat IP residential tidak diperlukan | Cocok untuk pengujian umum | Cocok untuk pemeriksaan otomatis yang sering |
Proksi perumahan berguna ketika sumber IP dan lokasi menjadi faktor penting. Proksi ISP berfungsi dengan baik ketika alamat IP yang sama perlu tetap aktif dalam waktu lama. Proksi pusat data cocok digunakan ketika fokus utamanya adalah kecepatan dan skala.
Pilihan terbaik juga bergantung pada apakah tugas tersebut memerlukan penargetan geografis, koneksi yang stabil, atau akses ke kumpulan alamat IP yang lebih besar.
Cara menghubungkan proxy di Puppeteer
Pengaturan proxy di Puppeteer memerlukan host, port, nama pengguna, dan kata sandi Geonode. Simpan kredensial tersebut dalam variabel lingkungan, lalu muat kredensial tersebut saat mengatur proxy dalam kode.
MenggunakGeonode? Dapatkan nama pengguna dan kata sandi dari Kredensial Akses serta host, port, dan protokol dari Informasi Server Proxy.
Jalur pengaturan atau kode
Untuk Puppeteer, masukkan host dan port proxy melalui ``--proxy-server`
` saat meluncurkan browser:
import puppeteer from "puppeteer";
import "dotenv/config";
const browser = await puppeteer.launch({
headless: true,
args: [
`--proxy-server=http://${process.env.GEONODE_PROXY_HOST}:${process.env.GEONODE_PROXY_PORT}`,
],
});
Kemudian buat halaman dan masukkan kredensial proxy:
const page = await browser.newPage();
await page.authenticate({
username: process.env.GEONODE_PROXY_USER,
password: process.env.GEONODE_PROXY_PASS,
});
Simpan nama pengguna dan kata sandi yang sebenarnya dalam variabel lingkungan, bukan menuliskannya langsung di berkas sumber. Pengaturan ini berhasil mengembalikan status HTTP 200 melalui proxy dalam pengujian kami.
Format otentikasi host:port:user:pass
Geonode
memberikan empat nilai:
proxy.geonode.io:PORT:USERNAME:PASSWORD
Untuk Puppeteer, pisahkan nilai-nilai tersebut. Simpan dalam variabel lingkungan:
GEONODE_PROXY_HOST=proxy.geonode.io
GEONODE_PROXY_PORT=9000
GEONODE_PROXY_USER=USERNAME
GEONODE_PROXY_PASS=PASSWORD
Muat host dan port melalui --proxy-server
, lalu lakukan otentikasi pada halaman:
const browser = await puppeteer.launch({
headless: true,
args: [
`--proxy-server=http://${process.env.GEONODE_PROXY_HOST}:${process.env.GEONODE_PROXY_PORT}`,
],
});
const page = await browser.newPage();
await page.authenticate({
username: process.env.GEONODE_PROXY_USER,
password: process.env.GEONODE_PROXY_PASS,
});
Kami telah menguji ini dengan kredensial yang valid dan menerima respons HTTP 200. Dengan kata sandi yang salah, proxy mengembalikan respons HTTP 407 dan:
Authentication error. Please check your authentication settings.
Rotasi vs. sesi tetap di Puppeteer
Jika permintaan tidak perlu menggunakan alamat IP yang sama, gunakan rotasi.
Untuk pengujian kami, kami menjalankan Puppeteer dengan port HTTP yang berputar:
const browser = await puppeteer.launch({
headless: true,
args: ["--proxy-server=http://proxy.geonode.io:9000"],
});
const page = await browser.newPage();
await page.authenticate({
username: process.env.GEONODE_PROXY_USER,
password: process.env.GEONODE_PROXY_PASS,
});
Kami membuat lima permintaan menggunakan sesi browser baru:
Request 1: 108.31.182.167
Request 2: 45.186.93.125
Request 3: 109.254.131.42
Request 4: 109.153.11.141
Request 5: 37.113.173.139
Jumlah alamat IP unik: 5
Rotasi: Ya
Kelima permintaan tersebut mengembalikan alamat IP yang berbeda dalam pengujian ini. Hal ini menegaskan bahwa rotasi berfungsi selama pengujian, tetapi tidak menjamin alamat IP baru untuk setiap permintaan di masa mendatang.
Jika permintaan yang terkait perlu tetap menggunakan alamat IP yang sama, gunakan sesi tetap (sticky session) sebagai gantinya. Gunakan port tetap dan tambahkan detail sesi ke nama pengguna:
const browser = await puppeteer.launch({
headless: true,
args: ["--proxy-server=http://proxy.geonode.io:10000"],
});
const page = await browser.newPage();
await page.authenticate({
username:
`${process.env.GEONODE_PROXY_USER}-session-blogpuppeteer01-lifetime-10`,
password: process.env.GEONODE_PROXY_PASS,
});
Kami membuat tiga permintaan menggunakan sesi yang sama:
Request 1: 178.64.64.40
Request 2: 178.64.64.40
Request 3: 178.64.64.40
IP yang sama: Ya
Ketiga permintaan tersebut menggunakan IP yang sama.
Lihat panduan Geonode
untuk proksi rotasi dan sesi sticky guna mengetahui pengaturan yang tersedia.
Kesalahan proxy yang umum terjadi di Puppeteer dan cara mengatasinya
Jika proxy tidak berfungsi, mulailah dengan memeriksa detail koneksi. Periksa nama pengguna dan kata sandi, lalu alamat host, port, dan protokol. Pesan kesalahan yang ditampilkan oleh Puppeteer biasanya dapat membantu mengidentifikasi sumber masalah.
407 Diperlukan Otentikasi Proksi
Kode status 407 biasanya menandakan adanya masalah otentikasi.
Saat kami menguji Puppeteer dengan kata sandi yang salah, proksi mengembalikan pesan:
HTTP status: 407
Authentication error. Please check your authentication settings.
Periksa terlebih dahulu nama pengguna dan kata sandi. Jika keduanya benar, pastikan page.authenticate() dipanggil setelah halaman dibuat.
ERR_TUNNEL_CONNECTION_FAILED / koneksi ditolak
Kesalahan koneksi biasanya berarti Puppeteer tidak dapat terhubung ke proxy.
Periksa terlebih dahulu alamat host dan portnya. Kemudian, pastikan protokolnya sesuai dengan server proxy yang digunakan.
Dalam uji koneksi yang gagal, Puppeteer tidak mengembalikan pesan "ERR_TUNNEL_CONNECTION_FAILED
". Penggunaan port proxy yang tidak dapat dijangkau menghasilkan pesan: "
net::ERR_CONNECTION_RESET at http://ip-api.com/json
". Oleh karena itu, pesan kesalahan Chromium yang tepat dapat berbeda-beda tergantung pada bagaimana koneksi tersebut gagal.
Timeout dan respons kosong
Timeout berarti halaman tidak menerima respons dalam waktu yang telah ditentukan.
Pertama, periksa apakah URL tujuan berfungsi dan apakah proxy dapat terhubung. Jika keduanya berfungsi, periksa batas waktu yang diteruskan ke ``page.goto()`
`.
Untuk pengujian kami, kami menggunakan proxy yang tidak dapat dirutekan dengan batas waktu lima detik:
await page.goto(url, {
timeout: 5000,
});
Puppeteer mengembalikan:
TimeoutError: Navigation timeout of 5000 ms exceeded
Menetapkan batas waktu secara eksplisit dapat membantu skrip segera gagal ketika koneksi proxy macet.
ERR_NO_SUPPORTED_PROXIES
Salah satu masalah khusus Puppeteer yang kami temukan adalah memasukkan nama pengguna dan kata sandi secara langsung ke dalam ``--proxy-server`
`.
Konfigurasi ini gagal:
--proxy-server=http://USERNAME:PASSWORD@proxy.geonode.io:9000
Puppeteer mengembalikan:
net::ERR_NO_SUPPORTED_PROXIES
Solusinya adalah hanya meneruskan server proxy melalui argumen peluncuran:
args: ["--proxy-server=http://proxy.geonode.io:9000"]
Kemudian lakukan otentikasi secara terpisah:
await page.authenticate({
username: process.env.GEONODE_PROXY_USER,
password: process.env.GEONODE_PROXY_PASS,
});
Setelah mengubah pengaturan, permintaan berhasil dengan status HTTP 200.
Puppeteer + Geonode: apa yang Anda dapatkan
Puppeteer menangani permintaan atau koneksi dalam aplikasi. Geonode menangani koneksi proxy.
Anda dapat memilih proxy residential, ISP, atau datacenter sesuai kebutuhan, lalu menggunakan rotasi, sesi tetap, dan penargetan geografis jika diperlukan. Hal ini memastikan pengaturan proxy tetap terpisah dari kode aplikasi lainnya.
Paket bervariasi tergantung jenis proxy, dengan beberapa opsi dihitung berdasarkan GB.
Pertanyaan yang Sering Diajukan
Apakah Puppeteer mendukung proxy SOCKS5?
SOCKS5 yang diautentikasi tidak berfungsi dengan pengaturan Puppeteer yang kami uji.
Kami mencoba port bergilir SOCKS5 dari Geonode dengan page.authenticate(), tetapi Puppeteer mengembalikan:
net::ERR_SOCKS_CONNECTION_FAILED
Kami juga mencoba menyematkan kredensial di --proxy-server, yang mengembalikan:
net::ERR_NO_SUPPORTED_PROXIES
Karena tidak ada konfigurasi SOCKS5 yang diautentikasi yang diuji berfungsi, pengaturan HTTP terverifikasi dengan --proxy-server dan page.authenticate() merupakan opsi yang lebih aman untuk konfigurasi ini.
Apakah saya bisa mengganti alamat IP per permintaan di Puppeteer?
Ya, Puppeteer dapat menggunakan proxy bergilir saat browser diluncurkan melalui konfigurasi proxy bergilir.
Dalam pengujian kami, lima sesi browser baru menghasilkan lima alamat IP yang berbeda. Hal ini menegaskan bahwa rotasi terjadi selama pengujian, namun tidak dijamin bahwa setiap permintaan atau sesi browser akan mendapatkan alamat IP yang berbeda.
Apakah ada uji coba gratis?
Ya. Geonode menawarkan uji coba gratis, sehingga proxy tersebut dapat diuji dengan Puppeteer sebelum beralih ke paket berbayar. Lihat uji coba gratis dan paket yang tersedia saat ini.
Di mana saya harus mengonfigurasi proxy di Puppeteer?
Atur host dan port proxy di puppeteer.launch()
menggunakan --proxy-server
.
Kemudian panggil page.authenticate()
setelah membuat setiap halaman untuk memasukkan nama pengguna dan kata sandi:
const browser = await puppeteer.launch({
args: ["--proxy-server=http://proxy.geonode.io:9000"],
});
const page = await browser.newPage();
await page.authenticate({
username: process.env.GEONODE_PROXY_USER,
password: process.env.GEONODE_PROXY_PASS,
});
Ini adalah konfigurasi yang berhasil dalam pengujian kami.
Apakah saya harus memasukkan nama pengguna dan kata sandi proxy ke dalam opsi --proxy-server?
Tidak. Pisahkan kredensial tersebut saat menggunakan konfigurasi Puppeteer ini.
Menyertakan USERNAME:PASSWORD@ secara langsung dalam --proxy-server menghasilkan pesan kesalahan ERR_NO_SUPPORTED_PROXIES dalam pengujian kami. Dengan hanya memasukkan host dan port di sana, lalu menggunakan page.authenticate() untuk kredensial, prosesnya berjalan dengan sukses.