# Selenium dengan proxy terautentikasi: forwarder lokal yang bekerja

> Proxy terautentikasi di Selenium: mengapa Chrome mengabaikan kredensial proxy, dan forwarder Python 40 baris yang menambahkannya. Proxy residensial, tanpa KYC.

- URL: https://crawlrelay.com/id/docs/selenium/
- Terakhir diperbarui: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

Flag proxy Chrome tidak menyediakan tempat untuk password. Forwarder lokal kecil di 127.0.0.1 menambahkan kredensial, sehingga Selenium hanya melihat proxy lokal terbuka.

**Jawaban cepat — Bagaimana cara menggunakan proxy dengan username dan password di Selenium?**

Jalankan forwarder lokal kecil yang menambahkan header `Proxy-Authorization`, dan arahkan Chrome ke sana dengan `--proxy-server=http://127.0.0.1:8899`. Chrome mengabaikan kredensial di flag tersebut, dan Selenium tidak memiliki opsi portabel untuk password proxy. **CrawlRelay** proxy residensial berfungsi seperti ini pada `gw.crawlrelay.com:7777`, dari US$0,50/GB. Bayar pakai crypto, tanpa KYC.

## Setup Selenium secara singkat

| Atribut | Nilai |
| --- | --- |
| Mengapa butuh forwarder | Flag `--proxy-server` Chrome tidak menerima username ataupun password |
| Forwarder | Mendengarkan di `127.0.0.1:8899`, menambahkan `Proxy-Authorization`, meneruskan ke `gw.crawlrelay.com:7777` |
| Opsi Chrome | `--proxy-server=http://127.0.0.1:8899` |
| Rotasi | Setiap terowongan CONNECT baru adalah koneksi baru, jadi biasanya exit baru; tambahkan ID sesi untuk satu IP |
| Alternatif yang lebih sederhana | [Playwright](https://crawlrelay.com/id/docs/playwright/) mengambil langsung nama pengguna dan kata sandi |

## Bagaimana cara kerja forwarder lokal?

Forwarder menerima permintaan proxy dari browser, menyisipkan satu header dengan kredensial Anda, lalu menyalin byte ke kedua arah. Untuk situs HTTPS, browser mengirim `CONNECT host:443`, gateway menjawab `200 Connection established`, dan TLS berjalan langsung antara Chrome dan situs web. Forwarder tidak pernah melihat isi halaman dalam teks jelas.

Versi minimal ini menangani situs HTTPS, di mana setiap koneksi membawa satu tunnel CONNECT. Ini mencakup hampir setiap situs web saat ini. Tetap jalankan bound di `127.0.0.1` agar tidak ada mesin lain yang bisa menggunakan kredensial Anda.

*forwarder.py (Python 3.8+, hanya perpustakaan standar)*

```python
import asyncio
import base64
import os

UPSTREAM = ("gw.crawlrelay.com", 7777)
USER = os.environ.get("CRAWLRELAY_USER", "USERNAME-country-us")
PASSWORD = os.environ.get("CRAWLRELAY_PASSWORD", "PASSWORD")
AUTH = b"Proxy-Authorization: Basic " + base64.b64encode(("%s:%s" % (USER, PASSWORD)).encode())


async def pipe(reader, writer):
    try:
        while True:
            data = await reader.read(65536)
            if not data:
                break
            writer.write(data)
            await writer.drain()
    except ConnectionError:
        pass
    finally:
        writer.close()


async def handle(client_reader, client_writer):
    try:
        head = await client_reader.readuntil(b"\r\n\r\n")  # request line and headers from the browser
    except asyncio.IncompleteReadError:
        client_writer.close()
        return
    lines = head.split(b"\r\n")
    lines.insert(1, AUTH)  # add the credentials right after the request line
    up_reader, up_writer = await asyncio.open_connection(*UPSTREAM)
    up_writer.write(b"\r\n".join(lines))
    await up_writer.drain()
    await asyncio.gather(pipe(client_reader, up_writer), pipe(up_reader, client_writer))


async def main():
    server = await asyncio.start_server(handle, "127.0.0.1", 8899)
    async with server:
        await server.serve_forever()


if __name__ == "__main__":
    asyncio.run(main())
```

## Bagaimana cara mengarahkan Selenium ke forwarder?

Mulai `forwarder.py` di satu terminal, kemudian jalankan skrip Selenium Anda dengan alamat proxy lokal. Selenium Manager, bawaan dari Selenium 4.6 dan seterusnya, mengunduh ChromeDriver yang sesuai, sehingga tidak perlu instalasi tambahan.

*selenium_example.py*

```python
from selenium import webdriver
from selenium.webdriver.common.by import By

options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=http://127.0.0.1:8899")  # the local forwarder
options.add_argument("--headless=new")

driver = webdriver.Chrome(options=options)
try:
    driver.set_page_load_timeout(60)
    driver.get("https://api.ipify.org")
    print("exit IP:", driver.find_element(By.TAG_NAME, "body").text)
finally:
    driver.quit()
```

## Bagaimana saya mendapatkan satu IP per sesi Selenium, atau IP baru per halaman?

Forwarder mengirimkan username apa pun yang Anda berikan, sehingga perilaku sesi tergantung pada username tersebut:

- **Rotasi per koneksi:** kosongkan bagian sesi (`USERNAME-country-us`). Chrome membuka beberapa koneksi per halaman, sehingga satu halaman dapat dimuat melalui beberapa exit.
- **Satu IP per sesi Selenium:** setel `CRAWLRELAY_USER` ke `USERNAME-country-us-session-run42-ttl-30` sebelum memulai forwarder. Setiap koneksi keluar melalui IP yang sama hingga 30 menit; IP bisa berubah lebih awal.
- **Beberapa sesi paralel:** jalankan satu forwarder per sesi di port lokal yang berbeda, seperti 8899 dan 8900, dan berikan setiap WebDriver portnya sendiri.

## Bagaimana dengan selenium-wire atau ekstensi browser?

selenium-wire, paket populer yang menambahkan autentikasi proxy dengan mencegat trafik, diarsipkan oleh pembuatnya pada Januari 2024 dan tidak menerima pembaruan. Ekstensi browser yang menjawab permintaan autentikasi proxy juga berfungsi, tetapi harus dikemas dan dimuat di setiap profil. Forwarder di atas tidak punya dependensi dan bekerja dengan browser manapun yang dikendalikan Selenium. Untuk proyek baru, [Playwright](https://crawlrelay.com/id/docs/playwright/) lebih sederhana lagi: langsung menerima username dan kata sandi proxy.

## Selenium dan proxy: pertanyaan

### Kenapa Chrome menampilkan pop-up login dengan proxy saya di Selenium?

Karena proxy meminta kredensial dan Chrome tidak punya: flag `--proxy-server` hanya menerima host dan port. Dalam mode headless masalah serupa muncul sebagai `ERR_TUNNEL_CONNECTION_FAILED`. Gunakan forwarder lokal yang menambahkan kredensial, atau beralih ke Playwright, yang menerima username dan password.

### Apakah forwarder memperlambat scraping saya?

Hampir tidak. Forwarder menyalin byte antara dua socket lokal dan satu remote tanpa mendekripsi. Waktu muat halaman tergantung pada exit proxy residensial dan situs target, bukan forwarder di mesin yang sama.

### Bisakah saya menggunakan Firefox daripada Chrome dengan Selenium?

Bisa. Atur preferensi proxy Firefox melalui `FirefoxOptions`: `network.proxy.type` ke 1, dan `network.proxy.http` serta `network.proxy.ssl` ke `127.0.0.1` pada port 8899. Tetap gunakan forwarder di depan: Firefox meminta kredensial proxy lewat dialog yang tidak bisa diisi dengan andal oleh Selenium.

### Apakah kata sandi saya aman di forwarder?

Kata sandi tetap di mesin Anda selama forwarder mendengarkan di `127.0.0.1`, seperti contoh. Ambil dari variabel lingkungan, jangan pernah commit, dan gunakan sub-user khusus dengan batas trafik untuk setiap scraper agar kebocoran kata sandi tidak menguras seluruh paket Anda.

**Berikan Selenium exit proxy residensial** US$1,50 untuk 1 GB untuk pengujian, US$0,50/GB dari 50 GB. [Lihat harga](https://crawlrelay.com/id/pricing/) · [Panduan Playwright](https://crawlrelay.com/id/docs/playwright/)

---

CrawlRelay: CrawlRelay adalah layanan proxy residensial dan proxy seluler 4G/5G yang berfokus pada pengembang untuk scraper dan pipeline data AI: trafik pay-as-you-go tanpa kedaluwarsa mulai dari US$0,50/GB, dibayar dengan crypto, tanpa perlu unggah ID. Tanpa KYC — tanpa ID, tanpa selfie, tanpa dokumen. Bayar dengan crypto.
