# การตั้งค่าพร็อกซี Playwright พร้อมพร็อกซีเรซิเดนเชียล IP หมุนเวียน (Python และ Node.js)

> การตั้งค่าพร็อกซี Playwright ใน Python และ Node.js ด้วยพร็อกซีเรซิเดนเชียลที่ต้องเข้าสู่ระบบ ต่อเบราว์เซอร์หรือต่อบริบท, เซสชันคงที่, โหลดหน้าเบา

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

ให้พร็อกซีเรซิเดนเชียลตอนเปิดใช้งานสำหรับทางออกหนึ่งอันต่อเบราว์เซอร์ หรือแต่ละ context สำหรับหนึ่งประเทศ หรือหนึ่งเซสชันติดตั้งต่อ context แล้วลดปริมาณข้อมูลโดยบล็อกสิ่งที่ไม่ต้องการ

**คำตอบด่วน — ฉันจะใช้พร็อกซีที่มีการยืนยันตัวตนใน Playwright ได้อย่างไร?**

ส่งวัตถุ `proxy` ที่มี `server`, `username` และ `password` ไปที่ `launch()` หรือ `new_context()`: `server` คือ `http://gw.crawlrelay.com:7777` และข้อมูลยืนยันตัวตนใส่ในช่องของมัน ไม่ใช่ใน URL เซิร์ฟเวอร์ สำหรับพร็อกซีเรซิเดนเชียล **CrawlRelay** ใส่ประเทศและรหัสเซสชันในชื่อผู้ใช้เพื่อให้แต่ละ context มีทางออกของตัวเอง ค่าปริมาณข้อมูลเริ่มต้นที่ US$0.50/GB จาก 50 GB จ่ายด้วยคริปโต ไม่ต้อง KYC

## การตั้งค่า Playwright อย่างรวดเร็ว

| คุณลักษณะ | ค่า |
| --- | --- |
| ตัวเลือกพร็อกซี | `{"server": "http://gw.crawlrelay.com:7777", "username": ..., "password": ...}` |
| ที่ไหน | `launch(proxy=...)` สำหรับเบราว์เซอร์ทั้งตัว หรือ `new_context(proxy=...)` ต่อ context |
| พอร์ต | พอร์ต HTTP 7777; เว็บไซต์ HTTPS ผ่าน CONNECT |
| SOCKS5 | Chromium ไม่รองรับการยืนยัน SOCKS5: ใช้พอร์ต HTTP |
| ไอพีหนึ่งอันต่อ context | `-session-<id>-ttl-<minutes>` ในชื่อผู้ใช้ของ context |
| ต้นทุนหน้าโดยทั่วไป | ประมาณ 2 MB กับทรัพยากรทั้งหมด; น้อยกว่านั้นถ้าบล็อกภาพ ตัวอักษร และสื่อ |

## ฉันจะให้แต่ละ context ในเบราว์เซอร์มีประเทศหรือเซสชันของตัวเองได้อย่างไร?

สร้าง context หนึ่งอันต่อประเทศหรือเซสชันติดตั้ง Context มีราคาถูกกว่าเบราว์เซอร์และแต่ละอันเก็บคุกกี้, ที่เก็บข้อมูล และข้อมูลพร็อกซีของตัวเอง จับคู่โลเคลของ context กับประเทศทางออก เพื่อให้เว็บไซต์เห็นผู้เข้าชมที่สม่ำเสมอ

*Python (sync API): context หนึ่งอันต่อประเทศ*

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

## ฉันจะตั้งพร็อกซีใน Playwright สำหรับ Node.js และลดปริมาณข้อมูลได้อย่างไร?

ตัวเลือกมีรูปแบบเดียวกันใน Node.js หนักที่สุดในหน้าที่เรนเดอร์คือภาพ ตัวอักษร และสื่อ: ขนาดกลางของหน้าเท่ากับ 2,164 KB บนมือถือใน HTTP Archive Web Almanac 2025 ถ้าต้องการแค่ข้อความและลิงก์ ให้ยกเลิกคำขอเหล่านั้นในตัวจัดการเส้นทาง

*Node.js: เซสชันติดตั้งตอนเปิดใช้งาน, บล็อกทรัพยากรหนัก*

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

## ฉันจะรันหลายหน้าแบบขนานด้วย asyncio ได้อย่างไร?

ใช้ async API กับกลุ่ม context ที่กำหนดไว้แต่ละ context เก็บเซสชันติดตั้งหนึ่งอันตลอดอายุการใช้งาน เพื่อให้เว็บไซต์เห็นผู้เข้าชมไม่กี่รายที่เสถียรแทนที่จะเป็นไอพีอย่างละคำขอ รีไซเคิล context พร้อมเซสชันใหม่หลังจากจำนวนหน้าที่กำหนดหรือหลังเกิดข้อผิดพลาด

*Python (async API): กลุ่ม context เซสชันติดตั้ง*

```python
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/"]))
```

## ทำไมฉันจึงเจอ ERR_TUNNEL_CONNECTION_FAILED หรือ ERR_PROXY_CONNECTION_FAILED?

- **net::ERR_TUNNEL_CONNECTION_FAILED** หมายถึงพร็อกซีไม่ยอมรับคำขอ CONNECT ส่วนใหญ่เกิดจากข้อมูลยืนยันตัวตนใส่ใน `server` แทนที่จะเป็น `username` และ `password` ทำให้ Chromium ไม่ส่งข้อมูลเลย ดู [ข้อผิดพลาด tunnel](https://crawlrelay.com/th/docs/errors/err-tunnel-connection-failed/).
- **net::ERR_PROXY_CONNECTION_FAILED** คือเบราว์เซอร์ไม่สามารถเชื่อมต่อเกตเวย์ได้: ข้อผิดพลาดพิมพ์ชื่อโฮสต์หรือพอร์ต หรือเครือข่ายบล็อกพอร์ต ดู [ข้อผิดพลาดการเชื่อมต่อพร็อกซี](https://crawlrelay.com/th/docs/errors/err-proxy-connection-failed/).
- **หมดเวลา 30000ms** ที่ `goto` มักหมายถึงรอ `load` หรือ `networkidle` ในหน้าที่โหลดตัวติดตามต่อเนื่อง รอ `domcontentloaded` แล้วเลือกตัวเลือกที่ต้องการ

## สิ่งที่นักเก็บข้อมูล (scraper) ด้วย Playwright ไม่ควรทำคืออะไร?

ใช้ Playwright รีดเดอร์หน้าเว็บสาธารณะที่ต้องใช้ JavaScript ไม่ใช่ปลอมตัวเป็นคน CrawlRelay's [นโยบายการใช้งานที่ยอมรับได้](https://crawlrelay.com/th/acceptable-use/) ห้ามใช้เบราว์เซอร์ผ่านเกตเวย์ของเราเพื่อสร้างบัญชีจำนวนมาก ยึดบัญชี แก้ CAPTCHA โดยอัตโนมัติ หรือละเมิดการป้องกันของเว็บไซต์ เราไม่สนับสนุนปลั๊กอินแอบทำงานหรือการปลอมลายนิ้วมือ หากเว็บไซต์ตรวจสอบเบราว์เซอร์ให้ชะลอความเร็ว ตรวจเช็ก robots.txt และข้อกำหนด แล้วขออนุญาตหรือใช้ API ของเว็บไซต์

## Playwright และพร็อกซี: คำถาม

### ฉันใช้พร็อกซีแตกต่างกันในแต่ละ context ของ Playwright ได้ไหม?

ได้ ส่ง `proxy` ไป `browser.new_context()` ใน Python หรือ `browser.newContext()` ใน Node.js แต่ละ context จะมีทางออก คุกกี้ และที่เก็บข้อมูลของตัวเอง รุ่นเก่าของ Playwright บน Windows ก็ต้องการพร็อกซีตอนเปิดใช้งาน หากเจอข้อผิดพลาด ให้เปิดด้วยพร็อกซีตัวแทนแล้วตั้งจริงตาม context

### Playwright รองรับพร็อกซี SOCKS5 ที่มีการยืนยันตัวตนได้ไหม?

ไม่รองรับบน Chromium ซึ่งไม่รองรับการยืนยันชื่อผู้ใช้และรหัสผ่านของ SOCKS5 ให้ใช้พอร์ต HTTP ของเกตเวย์ (7777): รองรับเว็บไซต์ HTTPS ผ่านอุโมงค์ CONNECT และรองรับชื่อผู้ใช้และรหัสผ่านในทุกเอนจินเบราว์เซอร์ที่ Playwright ควบคุม

### ฉันจะตรวจสอบว่าไอพีและประเทศที่หน้า Playwright ใช้คืออะไร?

เปิด `https://api.ipify.org` ใน context เดียวกันก่อนหน้าเป้าหมายแล้วอ่านข้อความใน body ตามตัวอย่างแรก จดจำว่าเซสชันติดตั้งจะเก็บไอพีไว้เฉพาะเมื่ออุปกรณ์เรซิเดนเชียลออนไลน์เท่านั้น บันทึกไอพีตอนเริ่มแต่ละ context เพื่อดูการเปลี่ยนแปลง

### หน้า Playwright ใช้ปริมาณข้อมูลเท่าไหร่ผ่านพร็อกซี?

ข้อมูลทั้งหมดมีค่าใช้จ่าย: HTML, สคริปต์, สไตล์, รูปภาพ, แบบอักษร และการเรียก API หน้าเต็มขนาดประมาณ 2 MB ส่วนการบล็อกภาพ แบบอักษร และสื่อจะลดลงเหลือแค่หลายร้อยกิโลไบต์ วัดขนาดหน้าจริงโดยสรุปขนาดการตอบสนองในตัวจัดการ `response` สำหรับ 50 หน้า

### ควรใช้เบราว์เซอร์แบบ headless หรือ headed สำหรับเก็บข้อมูล?

Headless เป็นตัวเลือกปกติสำหรับเซิร์ฟเวอร์และใช้ทรัพยากรน้อยกว่า ใช้ headed เฉพาะตอนดีบักสิ่งที่หน้าเว็บแสดง ไม่มีผลกับกฎ: รีดเดอร์หน้าเว็บสาธารณะด้วยความเร็วเหมาะสมและเคารพไฟล์ robots.txt กับข้อกำหนดของเว็บไซต์

**เรนเดอร์หน้าเว็บสาธารณะผ่าน IP เรซิเดนเชียล** US$5.94 สำหรับ 10 GB, US$0.50/GB จาก 50 GB. [ดูราคา](https://crawlrelay.com/th/pricing/) · [คู่มือ Puppeteer](https://crawlrelay.com/th/docs/puppeteer/)

---

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