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

Docs · Selenium 4 · Python

Selenium dengan proxy terautentikasi: forwarder lokal yang bekerja

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.

Terakhir diperbarui: · 4 baca dalam menit

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

Mengapa butuh forwarderFlag --proxy-server Chrome tidak menerima username ataupun password
ForwarderMendengarkan 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
RotasiSetiap terowongan CONNECT baru adalah koneksi baru, jadi biasanya exit baru; tambahkan ID sesi untuk satu IP
Alternatif yang lebih sederhanaPlaywright 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)
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
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 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.

Dari US$0,50/GB · tanpa KYC

Mulai sekarang