# Selenium กับพร็อกซีที่ต้องยืนยันตัวตน: ตัวแปลงสัญญาณท้องถิ่นที่ใช้งานได้

> พร็อกซีมีการยืนยันตัวตนใน Selenium: ทำไม Chrome ถึงไม่สนใจข้อมูลรับรองพร็อกซี และโปรแกรม Python ต่อพอร์ตขนาด 40 บรรทัดที่เพิ่มข้อมูลรับรองให้ Residential, ไม่ต้อง KYC

- URL: https://crawlrelay.com/th/docs/selenium/
- อัปเดตล่าสุด: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

แฟล็กพร็อกซีของ Chrome ไม่มีที่ใส่รหัสผ่าน ตัวแปลงสัญญาณท้องถิ่นเล็ก ๆ บน 127.0.0.1 จะเพิ่มข้อมูลรับรอง ทำให้ Selenium เห็นแค่พร็อกซีท้องถิ่นที่เปิดอยู่

**คำตอบด่วน — ฉันจะใช้พร็อกซีพร้อมชื่อผู้ใช้และรหัสผ่านใน Selenium ได้อย่างไร?**

รันโปรแกรมแปลงสัญญาณท้องถิ่นตัวเล็ก ๆ ที่เพิ่มเฮดเดอร์ `Proxy-Authorization` แล้วชี้ Chrome ให้ใช้ `--proxy-server=http://127.0.0.1:8899` Chrome จะไม่สนใจข้อมูลรับรองในแฟล็กนั้น และ Selenium ไม่มีทางเลือกแบบพกพาสำหรับรหัสผ่านพร็อกซี **พร็อกซีเรซิเดนเชียล CrawlRelay** ทำงานแบบนี้บน `gw.crawlrelay.com:7777` จาก US$0.50/GB จ่ายด้วยคริปโต พร้อมไม่ต้อง KYC

## การตั้งค่า Selenium ในภาพรวม

| คุณลักษณะ | ค่า |
| --- | --- |
| ทำไมต้องมีตัวแปลงสัญญาณ | แฟล็ก `--proxy-server` ของ Chrome รับไม่ได้ทั้งชื่อผู้ใช้และรหัสผ่าน |
| ตัวแปลงสัญญาณ | ฟังที่ `127.0.0.1:8899`, เพิ่ม `Proxy-Authorization`, ส่งต่อไปที่ `gw.crawlrelay.com:7777` |
| ตัวเลือกของ Chrome | `--proxy-server=http://127.0.0.1:8899` |
| การหมุนเวียน | ทุกการเชื่อมต่อ CONNECT ใหม่คือการเชื่อมต่อใหม่ ดังนั้นโดยปกติจะมีทางออกใหม่; เพิ่ม ID เซสชันสำหรับ IP เดียว |
| ทางเลือกที่ง่ายกว่า | [Playwright](https://crawlrelay.com/th/docs/playwright/) รับชื่อผู้ใช้และรหัสผ่านโดยตรง |

## พร็อกซีเรซิเดนเชียลในเครื่องทำงานอย่างไร?

มันรับคำขอพร็อกซีจากเบราว์เซอร์ แทรก header หนึ่งอันที่มีข้อมูลรับรองของคุณ และก็ส่งข้อมูลในสองทาง สำหรับเว็บไซต์ HTTPS เบราว์เซอร์จะส่ง `CONNECT host:443`, gateway ตอบกลับ `200 Connection established` แล้ว TLS ก็ทำงานแบบ end to end ระหว่าง Chrome และเว็บไซต์นั้น forwarder จะไม่เห็นเนื้อหาหน้าเว็บในรูปแบบข้อความปกติ

เวอร์ชันนี้แบบมินิมอลรองรับเว็บไซต์ HTTPS ที่การเชื่อมต่อนั้นมีท่อ CONNECT หนึ่งอัน ครอบคลุมเกือบทุกเว็บไซต์ในปัจจุบัน ให้ผูกไว้กับ `127.0.0.1` เพื่อไม่มีเครื่องอื่นใช้ข้อมูลรับรองของคุณได้

*forwarder.py (Python 3.8+, ใช้ไลบรารีมาตรฐานเท่านั้น)*

```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())
```

## ฉันจะตั้งค่า Selenium ให้ใช้พร็อกซีเรซิเดนเชียลนี้อย่างไร?

สตาร์ท `forwarder.py` ในเทอร์มินัลหนึ่ง จากนั้นรันสคริปต์ Selenium ของคุณโดยใช้ที่อยู่พร็อกซีในเครื่อง Selenium Manager ที่ฝังอยู่ใน Selenium 4.6 ขึ้นไปจะดาวน์โหลด ChromeDriver ที่ตรงกันให้เอง ไม่ต้องติดตั้งอะไรเพิ่ม

*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()
```

## ฉันจะขอ IP คนละตัวสำหรับแต่ละเซสชัน Selenium หรือ IP ใหม่ทุกหน้าได้อย่างไร?

พร็อกซีเรซิเดนเชียลส่งชื่อผู้ใช้ที่คุณให้มา พฤติกรรมเซสชันขึ้นกับชื่อผู้ใช้นั้น:

- **สลับเปลี่ยนตามการเชื่อมต่อ:** ไม่ใส่พาร์ทเซสชัน (`USERNAME-country-us`) Chrome เปิดการเชื่อมต่อหลายอันต่อหน้าเพจ จะโหลดผ่าน IP หลายตัวได้ในหน้าเดียว
- **หนึ่ง IP ต่อเซสชัน Selenium:** ตั้งค่า `CRAWLRELAY_USER` เป็น `USERNAME-country-us-session-run42-ttl-30` ก่อนสตาร์ท forwarder ทุกการเชื่อมต่อจะออกผ่าน IP เดิมสูงสุด 30 นาที IP อาจเปลี่ยนก่อนหน้านั้น
- **หลายเซสชันพร้อมกัน:** รัน forwarder หนึ่งตัวต่อเซสชันที่พอร์ตในเครื่องแตกต่าง เช่น 8899 กับ 8900 แล้วให้ WebDriver แต่ละตัวใช้พอร์ตของตัวเอง

## แล้ว selenium-wire หรือส่วนขยายเบราว์เซอร์ล่ะ?

selenium-wire แพ็กเกจยอดนิยมที่เพิ่มการพิสูจน์ตัวตนพร็อกซีโดยดักจับทราฟฟิก ถูกผู้เขียนเลิกพัฒนาและอัปเดตตั้งแต่ มกราคม 2024 ส่วนขยายเบราว์เซอร์ที่ตอบรับการพิสูจน์ตัวตนพร็อกซีก็ใช้ได้ แต่ต้องแพ็กเกจและโหลดเข้าโปรไฟล์แต่ละอัน Forwarder ข้างต้นไม่มีไลบรารีพึ่งพาและใช้ได้กับเบราว์เซอร์ทุกตัวที่ Selenium ควบคุม สำหรับโปรเจ็กต์ใหม่ [Playwright](https://crawlrelay.com/th/docs/playwright/) ง่ายกว่ามาก: รับชื่อผู้ใช้และรหัสผ่านพร็อกซีโดยตรง

## คำถามเกี่ยวกับ Selenium และพร็อกซี

### ทำไม Chrome ถึงขึ้นหน้าต่างล็อกอินพร็อกซีใน Selenium?

เพราะพร็อกซีขอข้อมูลรับรองแต่ Chrome ไม่มี: ธง `--proxy-server` รับแค่ host กับ port เท่านั้น ในโหมด headless ก็เป็นปัญหาเดียวกันที่ `ERR_TUNNEL_CONNECTION_FAILED` ใช้ forwarder ในเครื่องที่เติมข้อมูลรับรอง หรือใช้ Playwright ที่รับชื่อผู้ใช้และรหัสผ่านได้เลย

### พร็อกซีเรซิเดนเชียลนี้ทำให้การขูดข้อมูลช้าลงไหม?

แทบจะไม่เลย มันก็แค่คัดลอกข้อมูลระหว่างซ็อกเก็ตสองฝั่งในเครื่องกับซ็อกเก็ตภายนอก โดยไม่ถอดรหัสเวลาโหลดหน้าเว็บขึ้นกับพร็อกซีเรซิเดนเชียลที่ออกและเว็บไซต์ที่เป้าหมาย ไม่เกี่ยวกับ forwarder ที่รันในเครื่องเดียวกัน

### ฉันจะใช้ Firefox แทน Chrome ใน Selenium ได้ไหม?

ได้ ตั้งค่าพร็อกซี่ของ Firefox ผ่าน `FirefoxOptions`: `network.proxy.type` เป็น 1 และ `network.proxy.http` กับ `network.proxy.ssl` เป็น `127.0.0.1` ที่พอร์ต 8899 ให้ forwarder ทำงานข้างหน้า เพราะ Firefox จะถามข้อมูลรับรองพร็อกซีในกล่องโต้ตอบที่ Selenium เติมไม่ได้แม่นยำ

### รหัสผ่านของฉันปลอดภัยใน forwarder ไหม?

ยังอยู่ในเครื่องคุณตราบใดที่ forwarder ฟังพอร์ต `127.0.0.1` ตามตัวอย่าง แนะนำให้อ่านจากตัวแปรแวดล้อม ไม่ควรเก็บในที่เก็บโค้ด และใช้ซับยูเซอร์แยกแต่ละ scraper พร้อมจำกัดปริมาณทราฟฟิก เพื่อป้องกันรหัสผ่านรั่วไหลกระทบแผนใช้งานทั้งหมด

**ให้ Selenium ใช้พร็อกซีเรซิเดนเชียลเป็นทางออก** US$1.50 สำหรับ 1 GB เพื่อทดสอบ, US$0.50/GB จาก 50 GB. [ดูราคา](https://crawlrelay.com/th/pricing/) · [คู่มือ Playwright](https://crawlrelay.com/th/docs/playwright/)

---

CrawlRelay: CrawlRelay คือพร็อกซีเรซิเดนเชียลหมุนเวียนพร้อมพร็อกซีมือถือ 4G/5G สำหรับนักพัฒนา เหมาะกับสแครปเปอร์และระบบจัดการข้อมูล AI: เติมเงินจ่ายตามการใช้งานจาก US$0.50/GB จ่ายด้วยคริปโต ไม่ต้องอัปโหลดบัตรประชาชน ไม่ต้อง KYC — ไม่ต้องใช้บัตรประชาชน ไม่ต้องถ่ายเซลฟี่ ไม่ต้องใช้เอกสาร จ่ายด้วยคริปโต
