Trả lời nhanh: Playwright là thư viện của Microsoft cho phép điều khiển Chromium, Firefox và WebKit bằng code, mở trang, bấm nút, điền form, chụp ảnh, kiểm tra kết quả. Dùng nhiều nhất cho kiểm thử tự động giao diện web, và tiện không kém cho tự động hóa việc lặp lại trên web. Điểm khiến người mới thích ngay: lệnh codegen ghi lại thao tác chuột của bạn thành code chạy được.
Mọi lập trình viên web đều tới lúc chán việc bấm lại cùng một luồng đăng nhập, đặt hàng, thanh toán để kiểm tra sau mỗi lần sửa. Playwright thay bạn làm việc đó, chạy trên ba dòng trình duyệt, nhanh và ổn định hơn thế hệ công cụ trước nhiều. Bài này viết cho người chưa từng chạm tới tự động hóa trình duyệt: từ lệnh cài đầu tiên, tới bài kiểm thử đầu tiên, tới lúc đưa nó lên chạy tự động trên máy chủ.
Playwright làm được gì và khác Selenium ở đâu
Về bản chất, Playwright mở một trình duyệt thật rồi ra lệnh cho nó. Bạn viết vài dòng để mở trang, gõ vào ô, bấm nút, và khẳng định kết quả phải như thế nào. Ba nhóm việc phổ biến: kiểm thử giao diện (luồng đăng nhập, giỏ hàng, thanh toán chạy đúng sau mỗi lần deploy), tự động hóa việc lặp (đăng nhập cổng nào đó tải báo cáo mỗi sáng, điền form hàng loạt), và thu thập dữ liệu từ trang cần chạy JavaScript mới hiện nội dung.
So với Selenium, công cụ thống trị một thập kỷ trước, Playwright hơn ở ba điểm rất thực tế: tự chờ (mặc định đợi phần tử hiện ra và sẵn sàng nhận thao tác, xóa bỏ phần lớn các câu lệnh ngủ vài giây rải khắp code và kèm theo là những bài test chập chờn), cài đặt gọn (tự tải trình duyệt kèm theo, không phải quản lý driver riêng cho từng phiên bản), và công cụ gỡ lỗi tốt hơn hẳn với trace viewer. Đây là lý do phần lớn dự án mới chọn Playwright, dù Selenium vẫn phổ biến trong hệ thống cũ.
Dự án đầu tiên trong năm phút
Cần Node.js. Trong thư mục dự án:
npm init playwright@latestTrình cài hỏi vài lựa chọn (JavaScript hay TypeScript, tên thư mục test, có thêm workflow GitHub Actions không) rồi tự tải các trình duyệt cần thiết. Xong, bạn đã có cấu trúc mẫu và một bài test chạy được. Chạy toàn bộ:
npx playwright test # chay am tham, nhanhnpx playwright test --headed # hien trinh duyet de xem tan matnpx playwright show-report # mo bao cao sau khi chayMột bài test đọc rất giống mô tả bằng lời:
import { test, expect } from '@playwright/test'; test('dang nhap thanh cong', async ({ page }) => { await page.goto('https://vidu.com/login'); await page.getByLabel('Email').fill('[email protected]'); await page.getByLabel('Mat khau').fill('123456'); await page.getByRole('button', { name: 'Dang nhap' }).click(); await expect(page.getByText('Xin chao')).toBeVisible();});Chú ý cách chọn phần tử: getByRole và getByLabel tìm theo cách người dùng nhìn thấy chứ không theo class CSS, nhờ vậy bài test không vỡ mỗi khi lập trình viên đổi tên class. Đây là thói quen quan trọng nhất cần tập ngay từ đầu.
Codegen và trace viewer: hai công cụ nên biết trước tiên
Codegen là cách học nhanh nhất. Chạy:
npx playwright codegen https://vidu.comMột trình duyệt mở ra cùng cửa sổ ghi code. Bạn bấm chuột, gõ phím như người dùng bình thường, và Playwright viết code tương ứng theo thời gian thực. Copy về, dọn lại một chút là có bài test. Với người mới, dùng codegen vài lần rồi đọc code nó sinh ra dạy nhanh hơn mọi tài liệu.
Trace viewer giải quyết nỗi đau kinh điển: test chạy trên máy chủ thì hỏng, chạy ở máy mình thì qua. Bật ghi vết trong cấu hình, khi test hỏng bạn mở tệp vết ra và thấy toàn bộ phiên chạy: ảnh màn hình từng bước, cây DOM tại thời điểm đó, log mạng, log console, thời gian mỗi thao tác. Gần như mọi lỗi khó hiểu đều lộ nguyên nhân trong vòng một phút xem lại. Lệnh mở:
npx playwright show-trace trace.zipĐưa lên VPS: những việc phải làm thêm
Trình duyệt trên máy chủ Linux tối giản thiếu rất nhiều thư viện hệ thống, nên lệnh cài phải kèm cờ tương ứng:
npx playwright install --with-deps chromiumBốn lưu ý khi chạy trên VPS. Bộ nhớ dùng chung: Chromium trong Docker hay bị treo vì /dev/shm quá nhỏ, tăng lên bằng tham số khi chạy container, đây là lỗi khiến người ta mất nhiều giờ nhất. Dung lượng ổ đĩa: mỗi bản trình duyệt vài trăm MB, cộng thêm ảnh chụp, video và tệp vết sinh ra sau mỗi lần chạy, lý do chi tiết nằm ở bài Playwright test trên VPS ăn ổ đĩa, kèm cách dọn tự động. Số luồng song song: chạy nhiều bài cùng lúc rất nhanh nhưng mỗi luồng là một trình duyệt ăn RAM, nên đặt số worker khớp với cấu hình máy thay vì để mặc định. Chỉ cài trình duyệt bạn cần thay vì cả ba, tiết kiệm đáng kể thời gian cài và dung lượng.
Muốn chạy tự động sau mỗi lần đẩy code, thêm bước gọi Playwright vào quy trình CI của bạn, trình cài đặt ban đầu có tùy chọn sinh sẵn file workflow cho GitHub Actions.
Dùng Playwright để thu thập dữ liệu: nên và không nên
Vì điều khiển trình duyệt thật nên Playwright lấy được nội dung của những trang chỉ hiện ra sau khi JavaScript chạy, thứ mà công cụ tải HTML thuần bó tay. Nhưng nó cũng nặng hơn nhiều lần: mỗi trang là một phiên trình duyệt đầy đủ. Nguyên tắc chọn công cụ: nếu dữ liệu đã có sẵn trong HTML trả về hoặc có API công khai, đừng dùng trình duyệt, chậm hơn và tốn tài nguyên gấp bội.
Khi buộc phải dùng, ba điều nên nhớ: tôn trọng điều khoản của trang và tệp robots, đây là ranh giới pháp lý chứ không phải lời khuyên lịch sự; giới hạn tốc độ để không gây tải lên máy chủ người khác; và chuẩn bị cho việc bị chặn, quy mô lớn thì cần xoay proxy và điều tiết như phân tích trong bài Playwright + Crawlee và bài proxy cho Playwright. Còn muốn để AI tự điều khiển trình duyệt, đó là chủ đề của bài Playwright MCP ngay sau đây.
Đưa lên máy chủ: những việc phải làm thêm
# 1. Cai trinh duyet va cac thu vien he thong di kemnpx playwright install --with-deps chromium # 2. Chay o che do khong giao dien, day la mac dinh tren may chu# 3. Neu can chay o che do co giao dien: cai them man hinh aoapt install -y xvfb # 4. Gioi han so tien trinh song song theo BO NHO, khong theo so nhan# Moi tien trinh an 300 MB den 1 GBfree -h # 5. Don thu muc ket qua dinh kyfind ./test-results -type d -mtime +7 -exec rm -rf {} + 2>/dev/nulldu -sh ./test-results ./playwright-report 2>/dev/null # 6. Chi ghi video va dau vet khi that bai| Số tiến trình song song | Bộ nhớ nên có | Ghi chú |
|---|---|---|
| 2 | 4 GB | Đủ cho bộ kiểm thử nhỏ |
| 4 | 8 GB | Mức phổ biến |
| 8 | 16 GB | Cần ổ NVMe vì tạo và xóa rất nhiều tệp nhỏ |
Hai công cụ nên biết trước tiên
- Công cụ ghi lại thao tác thành mã: bạn bấm trên trình duyệt, nó sinh ra mã tương ứng. Đây là cách học nhanh nhất và cũng là cách viết kiểm thử nhanh nhất cho người mới.
- Công cụ xem lại dấu vết: khi kiểm thử thất bại, nó cho xem lại từng bước kèm ảnh chụp và trạng thái trang. Đây là công cụ tiết kiệm nhiều thời gian gỡ lỗi nhất.
Về việc thu thập dữ liệu: nên và không nên
- Kiểm điều khoản sử dụng của trang đích và tệp quy định thu thập trước khi làm. Nhiều trang cấm rõ ràng.
- Không thu thập dữ liệu cá nhân của người khác. Với doanh nghiệp Việt Nam, khung áp dụng là Luật Bảo vệ dữ liệu cá nhân số 91/2025/QH15, hiệu lực từ 01/01/2026.
- Đặt tần suất hợp lý, đừng gửi hàng nghìn yêu cầu mỗi phút tới máy chủ của người khác.
- Với dữ liệu công khai và mục đích hợp lệ, vẫn nên ưu tiên giao diện lập trình chính thức nếu trang đó có cung cấp.
Câu hỏi thường gặp
Playwright dùng được với Python không hay chỉ JavaScript?
Hỗ trợ chính thức JavaScript, TypeScript, Python, Java và .NET với cùng một bộ API. Bản JavaScript có hệ sinh thái công cụ đầy đủ nhất và tài liệu nhiều nhất, nhưng bản Python đủ tính năng cho hầu hết nhu cầu và rất được ưa dùng trong mảng tự động hóa.
Nên chọn Playwright hay Puppeteer?
Playwright nếu bạn cần chạy trên nhiều dòng trình duyệt và muốn bộ công cụ kiểm thử đầy đủ gồm chờ tự động, báo cáo và trace. Puppeteer nhẹ hơn và chỉ tập trung vào Chromium, hợp khi bạn chỉ cần điều khiển Chrome cho một tác vụ đơn giản.
Máy cấu hình bao nhiêu để chạy Playwright trên VPS?
2 vCPU và 4GB RAM chạy được vài luồng song song. Điểm nghẽn thường không phải CPU mà là RAM và ổ đĩa, vì mỗi trình duyệt tốn vài trăm MB và các tệp vết cùng video sinh ra rất nhanh chiếm dung lượng.
Test chạy máy mình thì qua, lên CI thì hỏng, vì sao?
Nguyên nhân phổ biến là chênh lệch môi trường: thiếu thư viện hệ thống, phông chữ khác làm bố cục lệch, máy CI chậm hơn nên phần tử chưa kịp hiện, hoặc múi giờ và ngôn ngữ khác. Bật trace và xem lại phiên chạy hỏng là cách tìm ra nhanh nhất.
