Tự động hóa trình duyệt với Playwright

Beautiful Soup chỉ đọc được HTML tĩnh. Với trang dựng bằng JavaScript — dashboard, ứng dụng React — bạn cần một trình duyệt thật. Playwright điều khiển trình duyệt đó bằng Python.

Cài đặt

pip install playwright
playwright install chromium

Ví dụ đầu tiên

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    trinh_duyet = p.chromium.launch(headless=True)
    trang = trinh_duyet.new_page()
    trang.goto("https://example.com")

    print(trang.title())
    trang.screenshot(path="anh.png", full_page=True)
    trinh_duyet.close()

Tương tác với trang

trang.fill("#username", "[email protected]")
trang.fill("#password", "matkhau")
trang.click("button[type=submit]")

trang.wait_for_url("**/dashboard")
trang.get_by_role("button", name="Xuất báo cáo").click()

Playwright tự chờ phần tử xuất hiện và sẵn sàng nhận thao tác. Bạn hầu như không cần time.sleep() — đây là khác biệt lớn so với Selenium.

Lấy dữ liệu

trang.goto("https://example.com/san-pham")
trang.wait_for_selector(".product-card")

for the in trang.query_selector_all(".product-card"):
    ten = the.query_selector("h3").inner_text()
    gia = the.query_selector(".price").inner_text()
    print(ten, gia)

Đăng nhập một lần, dùng lại nhiều lần

# Lần đầu: đăng nhập rồi lưu trạng thái
trang.context.storage_state(path="phien.json")

# Các lần sau
context = trinh_duyet.new_context(storage_state="phien.json")
trang = context.new_page()   # đã đăng nhập sẵn

Tải file

with trang.expect_download() as tai_ve:
    trang.click("text=Tải CSV")
tai_ve.value.save_as("baocao.csv")

Chạy trên server không màn hình

playwright install --with-deps chromium   # cài luôn thư viện hệ thống

Với Docker, hãy dùng image chính thức mcr.microsoft.com/playwright/python — nó đã có sẵn mọi phụ thuộc.

Dùng có trách nhiệm

  • Đọc robots.txt và điều khoản sử dụng của trang.
  • Thêm độ trễ giữa các yêu cầu, đừng dội hàng nghìn request.
  • Nếu trang có API công khai, hãy dùng API — nhanh hơn và ổn định hơn nhiều.
  • Không tự động vượt CAPTCHA hay đăng nhập vào tài khoản không phải của bạn.

Ngoài scraping, Playwright còn rất mạnh cho kiểm thử end-to-end: viết một lần, chạy trên Chromium, Firefox và WebKit.

Lên đầu trang