Tanpa KYC — tanpa ID, tanpa selfie, tanpa dokumen. Bayar dengan crypto: BTC, USDT, USDC, ETH, SOL, LTC
Bahasa: Bahasa Indonesia
Mulai sekarang

Dokumentasi · Playwright · Chromium, Firefox, WebKit

Pengaturan proxy Playwright dengan rotasi IP residensial (Python dan Node.js)

Berikan proxy saat peluncuran untuk satu exit per browser, atau per konteks untuk satu negara atau satu sesi sticky per konteks. Kemudian potong lalu lintas dengan memblokir apa yang tidak Anda butuhkan.

Terakhir diperbarui: · 4 baca dalam menit

Jawaban cepat

Bagaimana cara menggunakan proxy yang diautentikasi di Playwright?

Lewatkan objek proxy dengan server, username dan password ke launch() atau ke new_context(): server adalah http://gw.crawlrelay.com:7777, dan kredensial dimasukkan ke dalam bidang mereka sendiri, tidak pernah ke URL server. Dengan proxy residensial CrawlRelay, masukkan negara dan ID sesi di username untuk memberikan setiap konteks exit-nya sendiri. Biaya traffic US$0,50/GB mulai dari 50 GB. Dibayar dengan crypto, tanpa KYC.

Setup Playwright secara singkat

Opsi Proxy{"server": "http://gw.crawlrelay.com:7777", "username": ..., "password": ...}
Dimanalaunch(proxy=...) untuk seluruh browser, atau new_context(proxy=...) per konteks
PortPort HTTP 7777; situs HTTPS melewati CONNECT
SOCKS5Chromium tidak mendukung autentikasi SOCKS5: gunakan port HTTP
Satu IP per konteks-session-<id>-ttl-<minutes> di username konteks
Biaya halaman tipikalSekitar 2 MB dengan setiap sumber daya; beberapa ratus KB dengan gambar, font, dan media diblokir

Bagaimana cara memberikan setiap konteks browser negara atau sesi sendiri?

Buat satu konteks per negara atau per sesi sticky. Konteks lebih murah dibanding browser, dan masing-masing menyimpan cookie, penyimpanan dan kredensial proxy sendiri. Cocokkan locale konteks dengan negara exit agar situs melihat pengunjung yang konsisten.

Python (API sinkron): satu konteks per negara
from playwright.sync_api import sync_playwright

GATEWAY = "http://gw.crawlrelay.com:7777"
LOCALES = {"us": "en-US", "de": "de-DE", "jp": "ja-JP"}

with sync_playwright() as p:
    browser = p.chromium.launch()
    for country, locale in LOCALES.items():
        context = browser.new_context(
            proxy={"server": GATEWAY, "username": "USERNAME-country-%s" % country, "password": "PASSWORD"},
            locale=locale,
        )
        page = context.new_page()
        page.goto("https://api.ipify.org", wait_until="domcontentloaded")
        print(country, page.inner_text("body"))
        context.close()
    browser.close()

Bagaimana saya mengatur proxy di Playwright untuk Node.js dan memotong traffic?

Opsi ini sama bentuknya di Node.js. Sebagian besar bobot halaman yang dirender adalah gambar, font, dan media: median halaman sebesar 2.164 KB di mobile menurut HTTP Archive Web Almanac 2025. Jika Anda hanya perlu teks dan tautan, batalkan permintaan tersebut di pengelola rute.

Node.js: sesi sticky saat peluncuran, sumber berat diblokir
import { chromium } from "playwright";

const browser = await chromium.launch({
  proxy: {
    server: "http://gw.crawlrelay.com:7777",
    username: "USERNAME-country-us-session-pw1-ttl-30",
    password: "PASSWORD",
  },
});
const context = await browser.newContext();
// Images, fonts and media are most of a page's bytes
await context.route("**/*", (route) =>
  ["image", "font", "media"].includes(route.request().resourceType()) ? route.abort() : route.continue()
);
const page = await context.newPage();
const response = await page.goto("https://example.com/", { waitUntil: "domcontentloaded" });
console.log(response.status(), await page.title());
await browser.close();

Bagaimana saya menjalankan banyak halaman secara paralel dengan asyncio?

Gunakan API async dengan pool konteks tetap. Setiap konteks menyimpan satu sesi sticky selama masa hidupnya, sehingga situs melihat beberapa pengunjung stabil daripada satu IP per permintaan. Recyle konteks, dengan sesi ID baru, setelah jumlah halaman tertentu atau setelah terjadi error.

Python (API async): pool konteks sticky
import asyncio
import uuid

from playwright.async_api import async_playwright

GATEWAY = "http://gw.crawlrelay.com:7777"
WORKERS = 4


async def worker(browser, queue):
    session = uuid.uuid4().hex[:10]
    context = await browser.new_context(proxy={
        "server": GATEWAY,
        "username": "USERNAME-country-us-session-%s-ttl-30" % session,
        "password": "PASSWORD",
    })
    page = await context.new_page()
    while not queue.empty():
        url = await queue.get()
        try:
            response = await page.goto(url, wait_until="domcontentloaded", timeout=45000)
            print(session, url, response.status if response else None)
        except Exception as exc:  # timeouts and network errors: log and move on
            print(session, url, type(exc).__name__)
        finally:
            queue.task_done()
    await context.close()


async def main(urls):
    queue = asyncio.Queue()
    for url in urls:
        queue.put_nowait(url)
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        await asyncio.gather(*(worker(browser, queue) for _ in range(WORKERS)))
        await browser.close()


asyncio.run(main(["https://example.com/", "https://example.org/"]))

Mengapa saya mendapat ERR_TUNNEL_CONNECTION_FAILED atau ERR_PROXY_CONNECTION_FAILED?

  • net::ERR_TUNNEL_CONNECTION_FAILED berarti proxy tidak menerima permintaan CONNECT. Seringkali kredensial ditulis di dalam server bukan di username dan password, jadi Chromium tidak mengirimkan apa pun. Lihat error tunnel.
  • net::ERR_PROXY_CONNECTION_FAILED berarti browser tidak pernah sampai ke gateway: kesalahan ketik pada host atau port, atau jaringan memblokir port tersebut. Lihat error koneksi proxy.
  • Timeout 30000ms terlampaui pada goto biasanya berarti Anda menunggu load atau networkidle di halaman yang terus memuat tracker. Tunggu domcontentloaded lalu selector yang Anda butuhkan.

Apa yang tidak boleh dilakukan scraper Playwright?

Gunakan Playwright untuk merender halaman publik yang membutuhkan JavaScript, bukan untuk meniru orang. CrawlRelay’s Acceptable Use Policy melarang menggunakan browser melalui gateway kami untuk membuat akun secara massal, mengambil alih akun, menyelesaikan CAPTCHA secara otomatis, atau mengalahkan blokir situs yang disengaja. Kami tidak mendokumentasikan plugin stealth atau spoof fingerprint. Jika situs menantang browser Anda, perlambat, periksa robots.txt dan ketentuan, dan minta akses atau gunakan API situs tersebut.

Playwright dan proxy: pertanyaan

Bisakah saya menggunakan proxy berbeda untuk setiap konteks Playwright?

Ya. Berikan proxy ke browser.new_context() di Python atau browser.newContext() di Node.js. Setiap konteks memiliki exit, cookie, dan penyimpanan sendiri. Rilis Playwright lama di Windows juga memerlukan proxy saat peluncuran; jika Anda melihat error itu, mulai dengan proxy placeholder dan atur yang sebenarnya per konteks.

Apakah Playwright mendukung proxy SOCKS5 dengan autentikasi?

Tidak di Chromium, yang tidak mendukung autentikasi username dan password SOCKS5. Gunakan port HTTP gateway (7777): ia menangani situs HTTPS lewat tunnel CONNECT dan mendukung username dan password di semua mesin browser yang dijalankan Playwright.

Bagaimana saya memeriksa IP dan negara yang digunakan halaman Playwright?

Buka https://api.ipify.org di konteks yang sama sebelum target Anda dan baca teks body, seperti contoh pertama. Perlu diingat sesi sticky mempertahankan IP itu hanya selama perangkat residensial online; catat IP saat awal setiap konteks untuk melihat perubahan.

Berapa banyak traffic yang digunakan halaman Playwright melalui proxy?

Semua akan dihitung: HTML, script, style, gambar, font, dan panggilan API. Halaman penuh kira-kira 2 MB pada median; memblokir gambar, font dan media biasanya memotongnya menjadi beberapa ratus KB. Ukur halaman asli Anda dengan menjumlahkan ukuran respons di pengelola response untuk 50 halaman.

Haruskah saya memakai browser headless atau headed untuk scraping?

Headless adalah pilihan normal untuk server dan menggunakan sumber daya lebih sedikit. Gunakan browser headed hanya untuk debugging tampilan halaman. Tidak ada yang mengubah aturan: render halaman publik dengan kecepatan sopan dan hormati robots.txt serta ketentuan situs.

Render halaman publik lewat IP residensial

US$5,94 untuk 10 GB, US$0,50/GB dari 50 GB.

Dari US$0,50/GB · tanpa KYC

Mulai sekarang