Kiểm tra trình duyệt Headless nói chung đề cập đến một đối tượng hoặc vật thể không có đầu, và trong ngữ cảnh của trình duyệt, nó đề cập đến một mô phỏng trình duyệt không có giao diện người dùng. Tự động hóa trình duyệt Headless sử dụng trình duyệt web để kiểm tra đầu cuối mà không cần tải giao diện người dùng của trình duyệt.
Một số tính năng chính của Puppeteer bao gồm:
Puppeteer là một thư viện Node.js để điều khiển trình duyệt Chrome hoặc Chromium, chủ yếu cho các tác vụ như kiểm tra tự động, trích xuất dữ liệu web và tạo PDF. "Headless" trong Puppeteer đề cập đến một phiên bản trình duyệt có thể chạy mà không có giao diện người dùng.
Nói cách khác, trình duyệt chạy ở chế độ nền và không hiển thị cửa sổ mà bạn có thể tương tác trực quan. Thay vào đó, nó thực hiện các tác vụ theo chương trình và có thể được điều khiển bởi các kịch bản hoặc mã.
Puppeteer cho phép bạn điều khiển một phiên bản trình duyệt thông thường có giao diện người dùng trực quan và một phiên bản trình duyệt Headless. Chế độ Headless đặc biệt hữu ích cho các tác vụ như trích xuất dữ liệu web, kiểm tra tự động và tạo ảnh chụp màn hình hoặc PDF, vì nó cho phép các tác vụ này được thực hiện hiệu quả mà không cần hiển thị cửa sổ trình duyệt.
Một số lợi ích của việc sử dụng chế độ Headless của Puppeteer:
Trình duyệt Headless đặc biệt mạnh mẽ cho các tác vụ yêu cầu tương tác tự động với các trang web, trích xuất dữ liệu, kiểm tra và các hoạt động khác không yêu cầu hiển thị trực quan.
Bạn có bất kỳ ý tưởng tuyệt vời hay nghi ngờ nào về trích xuất dữ liệu web và Browserless?
Hãy xem những gì các nhà phát triển khác đang chia sẻ trên Discord và Telegram!
Làm cách nào để thực hiện kiểm tra trình duyệt Headless với Puppeteer và Browserless?
Hãy tìm hiểu nó trong nội dung sau!
Trước khi kiểm tra, chúng ta cần có dịch vụ Browserless. Browserless có thể giúp chúng ta giải quyết các tác vụ thu thập dữ liệu web phức tạp và tự động hóa quy mô lớn. Với việc triển khai đám mây của thành tích được quản lý đầy đủ, Browserless có chức năng mạnh mẽ hơn.
Browserless áp dụng chiến lược tập trung vào trình duyệt, cung cấp khả năng triển khai Headless mạnh mẽ và mang lại hiệu suất và độ tin cậy cao hơn. Vui lòng nhấp vào đây để tìm hiểu thêm về cấu hình của dịch vụ Browserless.
Sau khi hoàn thành việc khởi tạo môi trường, chúng ta cần xác định thêm mục tiêu kiểm tra của mình.
Chúng ta sẽ chỉ tìm hiểu một ví dụ về cách sử dụng Puppeteer với Browserless mà không có trang web cụ thể nào. Vui lòng chỉ định mẫu cho các trang web và yêu cầu mục tiêu của bạn.
Ở đây, hãy sử dụng Puppeteer
để lấy tiêu đề của trang và tạo ảnh chụp màn hình. Sau đó, chúng ta sẽ kết hợp nó với Jest để viết các trường hợp kiểm tra.
Dưới đây là nội dung kiểm tra chính của chúng tôi:
Tiếp theo, vui lòng làm theo các bước dưới đây để cài đặt Puppeteer
và chạy kịch bản kiểm tra:
Bước 1: Tạo một thư mục mới trong Vs code
Bước 2: Mở thiết bị đầu cuối Vs code và chạy các lệnh sau để cài đặt các phụ thuộc liên quan
npm init -y
pnpm add jest jest-html-reporter puppeteer-core
Bước 3: Hoàn thành các tệp liên quan
jest.config.js
để thực hiện cấu hình liên quan:module.exports = {
testTimeout: 10000, // 10 giây
reporters: [
'default',
[
'jest-html-reporter',
{
pageTitle: 'Báo cáo kiểm tra',
outputPath: './test-report.html',
includeFailureMsg: true,
includeConsoleLog: true,
},
],
],
};
__tests__/puppeteer.spec.js
Để khởi chạy trình duyệt, bạn cần truyền cấu hình liên quan (để biết cấu hình đầy đủ, hãy tham khảo LaunchNewBrowser
const puppeteer = require('puppeteer-core');
describe('Kiểm tra Puppeteer đầu tiên của tôi', () => {
it('nên tải trang và kiểm tra tiêu đề', async () => {
const browserWSEndpoint = await launchAndConnectToBrowser();
const browser = await puppeteer.connect({
browserWSEndpoint: browserWSEndpoint,
defaultViewport: null,
});
const page = await browser.newPage();
await page.goto('https://example.com');
const title = await page.title();
expect(title).toBe('Ví dụ miền');
await browser.close();
});
// chụp ảnh màn hình của trang
it('nên chụp ảnh màn hình của trang', async () => {
const browserWSEndpoint = await launchAndConnectToBrowser();
const browser = await puppeteer.connect({
browserWSEndpoint: browserWSEndpoint,
defaultViewport: null,
});
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({ path: 'example.png' });
await browser.close();
});
});
async function launchAndConnectToBrowser() {
const token = ''; // mã thông báo api của bạn từ nstbrowser
const config = {
proxy:
'', // bắt buộc; định dạng đầu vào: schema://user:password@host:port ví dụ: http://user:password@localhost:8080
// platform: 'windows', // hỗ trợ: windows, mac, linux
// kernel: 'chromium', // chỉ hỗ trợ: chromium
// kernelMilestone: '128', // hỗ trợ: 128
// args: {
// "--proxy-bypass-list": "detect.nstbrowser.io"
// }, // đối số trình duyệt
// fingerprint: {
// userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.85 Safari/537.36', // userAgent được hỗ trợ kể từ phiên bản 0.15.0
// },
};
const query = new URLSearchParams({
token: token, // bắt buộc
config: JSON.stringify(config),
});
const browserWSEndpoint = `ws://less.nstbrowser.io/connect?${query.toString()}`;
return browserWSEndpoint;
}
Bây giờ chúng ta chỉ cần mở bảng điều khiển và chạy lệnh kịch bản sau:
npx jest --detectOpenHandles
Các lệnh ở đây có thể được phân chia thành:
npx
để thực thi lệnh jest.jest.config.js
của dự án hiện tại và lấy thông tin cấu hình cơ bản.Sau khi thực thi lệnh trên, chúng ta sẽ thấy đầu ra sau. Ở đây, mỗi kết quả quan trọng của quy trình thực thi kiểm tra sẽ được xuất ra và nó cho chúng ta thấy rằng trường hợp kiểm tra của chúng ta đã vượt qua.
Cùng lúc đó, chúng ta có thể mở tệp test-report.html
để xem báo cáo cụ thể được tạo:
Cấu trúc tệp của dự án như sau. Chúng ta cũng có thể thấy nội dung tệp ảnh chụp màn hình đầu ra, có nghĩa là trường hợp kiểm tra của chúng ta đã được vượt qua hoàn toàn.
page.waitForTimeout
), hãy ưu tiên chờ các sự kiện hoặc phần tử cụ thể (page.waitForSelector
), điều này làm cho tự động hóa của bạn hiệu quả hơn và phục hồi hơn đối với các thời gian tải khác nhau.browser.createIncognitoBrowserContext
). Điều này ngăn dữ liệu được lưu trong bộ nhớ cache, cookie hoặc lưu trữ cục bộ ảnh hưởng đến các phiên sau.navigator.webdriver
) có thể giúp bỏ qua phát hiện Headless.Trình duyệt Headless Puppeteer làm cho mọi thứ trở nên dễ dàng. Trong bài đăng này, chúng tôi nhắm đến việc chia sẻ với bạn:
Browserless của Nstbrowser đơn giản hóa cấu hình và hoạt động của Puppeteer. Cũng giống như trước đây, đã đến lúc tiếp cận: cách Browserless hoạt động với Playwright và Puppeteer!