Bài viết này, chúng ta sẽ khám phá cách khởi chạy profile Nstbrowser trong Docker, bao gồm cả thiết lập thủ công và tự động hóa bằng API. Chúng ta cũng sẽ chứng minh cách đồng bộ dữ liệu đăng nhập giữa client và container Docker, cho phép trải nghiệm không cần đăng nhập.
Bắt đầu thôi!
docker run -it \
-e TOKEN=xxx \
-p 8848:8848 \
-p 5900:5900 \
--name browserless \
nstbrowser/browserless:latest
Nstbrowser hỗ trợ hai loại profile: Profile Chung và Profile Một lần. Dưới đây, bạn sẽ tìm thấy các bước chi tiết để tạo và khởi chạy từng loại dựa trên nhu cầu của bạn.
Điều hướng đến trang tạo profile trong client Nstbrowser. Tùy chỉnh dấu vân tay trình duyệt theo nhu cầu của bạn hoặc sử dụng các cấu hình đã được xác định trước. Nhấp vào "Tạo Profile" để tạo profile.
Sau khi profile được tạo, nhấp vào nút "Khởi chạy" để bắt đầu nó.
Nếu cảnh báo này xuất hiện, hãy nhấp vào Tải xuống Ngay. Chờ cho quá trình cài đặt hoàn tất và khởi động lại profile.
Chúng tôi khuyên bạn nên sử dụng API v2 cho các hoạt động lập trình. Dưới đây là các bước để tạo và khởi chạy profile thông qua API.
Tạo Profile bằng API
Nstbrowser cung cấp API CreateProfile. Yêu cầu giao diện này sẽ trực tiếp tạo profile cho bạn. Hãy chú ý đến các tham số bắt buộc. Sử dụng curl để bắt đầu yêu cầu:
# thay thế bằng apikey của bạn
curl 'http://localhost:8848/api/v2/profiles/' -X POST \
-H 'Content-Type: application/json' \
-H 'x-api-key: apikey' \
--data-raw $'{"name": "profileCreatedByApiCreateProfile"}'
Kết quả trả về:
{
"data": {
"profileId": "xxxxxx",
"fingerprintId": "xxxxxx",
"groupId": "xxxxxx",
"teamId": "xxxxxx",
"userId": "xxxxxx",
"name": "profileCreatedByApiCreateProfile",
"kernel": 0,
"kernelVersion": "",
"kernelMilestone": "132",
"uaFullVersion": "132.0.6834.83",
"platform": 0,
"platformVersion": "13.0.0",
"saveLocal": false,
"status": 1,
"note": ""
},
"err": false,
"msg": "success",
"code": 200
}
Bạn có thể thấy profile bạn vừa tạo bằng API CreateProfile trên trang Profiles của Dashboard.
Khởi chạy Profiles
Các API sau đây có thể được sử dụng để bắt đầu Profile đã được tạo:
Giao diện này được sử dụng để bắt đầu profile hàng ngày đã được tạo. Phương pháp curl khởi tạo giao diện yêu cầu:
# thay thế bằng apikey và profileId của bạn
curl 'http://localhost:8848/api/v2/browsers/xxxxxx' -X POST \
-H 'x-api-key: apikey'
Kết quả trả về:
{
"data": {
"profileId": "xxxxxx",
"port": 46300,
"webSocketDebuggerUrl": "ws://127.0.0.1:browserPort/devtools/browser/xxxxx"
},
"err": false,
"msg": "success",
"code": 200
}
Bạn có thể thấy rằng Profile chúng ta đã tạo thông qua API đã được bắt đầu thành công thông qua yêu cầu giao diện.
Giao diện này được sử dụng để bắt đầu hàng loạt các profile đã được tạo. Phương pháp curl khởi tạo giao diện yêu cầu:
# thay thế bằng apikey và profileIds của bạn
curl 'http://localhost:8848/api/v2/browsers' -X POST \
--header 'Content-Type: application/json' \
-H 'x-api-key: apikey' \
--data-raw '[
"xxxxxx",
"xxxxxx"
]
Bạn có thể thấy rằng profile chúng ta đã tạo trước đó đã được bắt đầu thành công thông qua API bắt đầu hàng loạt
Giao diện này hỗ trợ truy cập bằng HTTP GET và WebSocket. Nếu bạn chỉ muốn khởi chạy trình duyệt, vui lòng sử dụng HTTP GET để truy cập. Nếu bạn muốn kết nối, bạn cần sử dụng WebSocket để truy cập. Nó chủ yếu được sử dụng cho:
Dưới đây minh họa cách truy cập giao diện bằng JavaScript Puppeteer:
import puppeteer from "puppeteer-core";
// apikey của bạn
const apiKey = 'xxxxxx';
// profileId của bạn
const profileId = 'xxxxxx';
// điểm cuối WebSocket của trình duyệt
const browserWSEndpoint = `ws://localhost:8848/api/v2/connect/${profileId}`;
(async () => {
let browser = null
try {
browser = await puppeteer.connect({
browserWSEndpoint,
defaultViewport: null, // đặt viewport tối đa
headers: {
'x-api-key': apiKey,
}
});
const page = await browser.newPage();
await page.goto("https://nstbrowser.io");
await page.screenshot({ fullPage: true, path: 'nstbrowser.png' });
}
catch (e) {
console.log(e);
} finally {
browser && browser.close();
}
})();
Chúng ta có thể thấy rằng profile chúng ta đã tạo trước đó thông qua API CreateProfile đã được khởi chạy thành công và truy cập vào trang web chính thức của Nstbrowser.
Profile một lần không lưu dữ liệu người dùng. Thư mục profile tự động bị xóa sau khi trình duyệt đóng. Bạn có thể khởi chạy hoặc kết nối với profile một lần bằng API ConnectOnceBrowser. Dưới đây là cách truy cập API bằng JavaScript Playwright:
import { chromium } from "playwright";
// apikey của bạn
const apiKey = 'xxxxxx';
// cấu hình profile một lần
const config = {
"name": "onceProfileByConnectOnceBrowser"
};
const query = new URLSearchParams({
"config": JSON.stringify(config),
});
// điểm cuối WebSocket của `API ConnectOnceBrowser` với cấu hình khởi chạy
const endpointURL = `ws://localhost:8848/api/v2/connect?${query.toString()}`;
(async () => {
let browser = null
try {
browser = await chromium.connectOverCDP(
endpointURL,
{
headers: {
'x-api-key': apiKey,
}
});
const page = await browser.newPage();
await page.goto("https://google.com");
await page.screenshot({ fullPage: true, path: 'google.png' });
}
catch (e) {
console.log(e);
} finally {
browser && browser.close();
}
})();
Profile once
này sẽ tự động xóa dữ liệu của người dùng sau khi đóng.
Chúng ta tạo một profile trên client và thêm trang đăng nhập Google vào URL Khởi chạy. Bạn cũng có thể nhập các trang web khác:
Để đồng bộ dữ liệu profile được khởi chạy bởi client vào container Docker, bạn cần bật đồng bộ đám mây và đồng bộ cookie trong cài đặt nhóm:
Nhấp để khởi chạy profile và đăng nhập vào Google, sau đó nhấp để đóng trình duyệt và dữ liệu sẽ tự động được đồng bộ lên đám mây:
# thay thế xxxxxx bằng apikey của bạn
docker run -it \
-e TOKEN=xxxxxx \
-p 8848:8848 \
-p 5900:5900 \
--name browserless \
nstbrowser/browserless:latest
Chúng ta sử dụng mã trong Tự động hóa bằng JavaScript Puppeteer để truy cập container Docker và khởi chạy profile của tài khoản Google đã đăng nhập trên client:
import puppeteer from 'puppeteer';
async function execPuppeteer(browserWSEndpoint) {
try {
const browser = await puppeteer.connect({
browserWSEndpoint: browserWSEndpoint,
defaultViewport: null,
});
const page = await browser.newPage();
await page.goto('https://myaccount.google.com');
await page.screenshot({ path: 'google.png' });
await browser.disconnect();
} catch (err) {
console.error(err);
}
}
// ConnectBrowser: Khởi chạy và kết nối với trình duyệt đang chạy hoặc profile đã được tạo
async function launchAndConnectToBrowser(profileId) {
const host = 'localhost:8848';
const browserWSEndpoint = `ws://${host}/api/v2/connect/${profileId}`;
console.log('browserWSEndpoint: ', browserWSEndpoint);
await execPuppeteer(browserWSEndpoint);
}
launchAndConnectToBrowser('your profileId').then();
Sau khi khởi chạy profile, trang tài khoản Google sẽ tự động được truy cập. Vì chúng ta đã đăng nhập vào tài khoản Google trên client và bật đồng bộ đám mây, nên chúng ta có thể đồng bộ thông tin đăng nhập tài khoản Google sau khi khởi chạy profile trong container docker.
Chúng ta đã giới thiệu cách tạo và khởi chạy profile, và chứng minh cách đăng nhập vào trang Nstbrowser sau khi tạo và khởi chạy profile với đồng bộ đám mây được bật trên client, và sau đó đồng bộ dữ liệu thành công sau khi khởi chạy profile trong container Docker để đạt được hiệu ứng không cần đăng nhập.
Bài viết này và tất cả các giao diện đều dựa trên Nstbrowser API v2, yêu cầu client Nstbrowser được cập nhật lên phiên bản v1.15.4
trở lên, và phiên bản ảnh Docker 132-202503101200.v1
trở lên