Không cần KYC — không cần ID, không selfie, không giấy tờ. Thanh toán bằng crypto: BTC, USDT, USDC, ETH, SOL, LTC
Ngôn ngữ: Tiếng Việt
Bắt đầu ngay

Tài liệu · Playwright · Chromium, Firefox, WebKit

Cài đặt proxy dân cư Playwright với IP dân cư thay đổi luân phiên (Python và Node.js)

Cấp proxy ngay khi khởi chạy cho một exit trên mỗi trình duyệt hoặc mỗi context cho một quốc gia hoặc một phiên sticky mỗi context. Sau đó, giảm lưu lượng bằng cách chặn những gì bạn không cần.

Cập nhật lần cuối: · 5 phút đọc

Trả lời nhanh

Làm thế nào để tôi sử dụng proxy dân cư có xác thực trong Playwright?

Truyền một đối tượng proxy kèm server, username và password vào launch() hoặc vào new_context(): server là http://gw.crawlrelay.com:7777, và thông tin đăng nhập nằm trong các trường riêng, không bao giờ để trong URL máy chủ. Với proxy dân cư CrawlRelay, đặt tên quốc gia và ID phiên trong tên đăng nhập để mỗi context có exit riêng. Lưu lượng tính phí theo 0,50 US$/GB từ 50 GB. Thanh toán bằng crypto, không cần KYC.

Cài đặt Playwright trong nháy mắt

Tùy chọn proxy{"server": "http://gw.crawlrelay.com:7777", "username": ..., "password": ...}
Ở đâulaunch(proxy=...) cho toàn bộ trình duyệt, hoặc new_context(proxy=...) theo từng context
PortCổng HTTP 7777; Trang web HTTPS đi qua CONNECT
SOCKS5Chromium không hỗ trợ xác thực SOCKS5: dùng cổng HTTP
Một IP mỗi context-session-<id>-ttl-<minutes> trong tên đăng nhập của context
Chi phí trang điển hìnhKhoảng 2 MB với mọi tài nguyên; vài trăm KB nếu chặn hình ảnh, font và media

Làm sao để tôi cung cấp cho mỗi context của trình duyệt quốc gia hoặc phiên riêng?

Tạo một context cho mỗi quốc gia hoặc mỗi phiên sticky. Context rẻ hơn nhiều so với trình duyệt, và mỗi context giữ cookie, bộ nhớ và thông tin proxy riêng. Đồng bộ locale của context với quốc gia exit để trang web thấy khách truy cập ổn định.

Python (API đồng bộ): một context mỗi quốc gia
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()

Làm thế nào để tôi thiết lập proxy trong Playwright cho Node.js và giảm lưu lượng?

Tùy chọn có cùng dạng trong Node.js. Phần lớn trọng lượng trang được render là hình ảnh, font và media: trang trung bình nặng 2.164 KB trên mobile theo HTTP Archive Web Almanac 2025. Nếu bạn chỉ cần văn bản và link, hãy hủy những yêu cầu đó trong route handler.

Node.js: phiên sticky khi khởi chạy, chặn tài nguyên nặng
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();

Làm sao tôi chạy nhiều trang song song với asyncio?

Dùng async API với một pool cố định các context. Mỗi context giữ một phiên sticky suốt thời gian tồn tại, để trang web thấy vài khách truy cập ổn định thay vì 1 IP mỗi yêu cầu. Tái sử dụng context, với ID phiên mới, sau số trang cố định hoặc sau lỗi.

Python (API bất đồng bộ): pool các context 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/"]))

Tại sao tôi nhận lỗi ERR_TUNNEL_CONNECTION_FAILED hoặc ERR_PROXY_CONNECTION_FAILED?

  • net::ERR_TUNNEL_CONNECTION_FAILED nghĩa là proxy từ chối yêu cầu CONNECT. Thông thường thông tin đăng nhập bị ghi trong server thay vì username và password, nên Chromium không gửi. Xem lỗi tunnel.
  • net::ERR_PROXY_CONNECTION_FAILED nghĩa là trình duyệt không kết nối tới gateway: có thể do lỗi host hoặc port, hoặc mạng chặn port. Xem lỗi kết nối proxy.
  • Timeout 30000ms exceeded trên goto thường có nghĩa bạn đang đợi load hoặc networkidle trên trang liên tục tải tracker. Đợi domcontentloaded rồi đợi selector bạn cần.

Trình duyệt Playwright không nên làm gì?

Dùng Playwright để render trang công khai cần JavaScript, không phải để mạo danh người dùng. Chính sách sử dụng Acceptable Use Policy của CrawlRelay cấm dùng trình duyệt qua gateway của chúng tôi để tạo tài khoản hàng loạt, chiếm quyền tài khoản, giải CAPTCHA tự động hoặc vượt qua chặn có chủ đích của trang. Chúng tôi không cung cấp tài liệu về plugin ẩn hoặc giả mạo dấu vân tay. Nếu trang web thử thách trình duyệt bạn, hãy làm chậm lại, kiểm tra robots.txt và điều khoản, rồi xin quyền truy cập hoặc dùng API của họ.

Playwright và proxy: các câu hỏi thường gặp

Tôi có thể dùng proxy khác nhau cho từng context Playwright không?

Có. Truyền proxy vào browser.new_context() trong Python hoặc browser.newContext() trong Node.js. Mỗi context có exit, cookie và bộ nhớ riêng. Phiên bản Playwright cũ trên Windows cũng yêu cầu proxy khi khởi chạy; nếu lỗi này xuất hiện, hãy khởi chạy với proxy giả rồi đặt proxy thật cho từng context.

Playwright có hỗ trợ proxy di động 4G SOCKS5 với xác thực không?

Không trên Chromium, vì nó không hỗ trợ xác thực SOCKS5 với tên đăng nhập và mật khẩu. Dùng cổng HTTP của gateway (7777): nó xử lý trang HTTPS qua tunnel CONNECT và hỗ trợ tên đăng nhập, mật khẩu trong mọi engine trình duyệt Playwright điều khiển.

Làm sao kiểm tra IP và quốc gia mà trang Playwright đang dùng?

Mở https://api.ipify.org trong cùng context trước trang đích và đọc nội dung, như ví dụ đầu tiên. Lưu ý phiên sticky giữ IP đó chỉ khi thiết bị proxy dân cư còn kết nối mạng; ghi lại IP khi bắt đầu mỗi context để phát hiện thay đổi.

Trang Playwright dùng bao nhiêu lưu lượng qua proxy?

Tất cả đều tính phí: HTML, script, style, ảnh, font và API gọi. Một trang đầy đủ khoảng 2 MB ở mức trung bình; chặn ảnh, font và media thường giảm còn vài trăm KB. Đo lưu lượng thực tế bằng cách cộng kích thước phản hồi trong handler response cho 50 trang.

Nên dùng trình duyệt headless hay có giao diện khi scraping?

Headless là lựa chọn thường dùng cho server và tiết kiệm tài nguyên hơn. Dùng trình duyệt có giao diện chỉ để debug nội dung trang. Cả hai không thay đổi quy tắc: render trang công khai với tốc độ lịch sự, và tôn trọng robots.txt cùng điều khoản của trang.

Render trang công khai qua IP proxy dân cư

5,94 US$ cho 10 GB, 0,50 US$/GB từ 50 GB.

Từ 0,50 US$/GB · không cần KYC

Bắt đầu ngay