Hướng dẫn chi tiết thiết lập API chụp ảnh màn hình với Puppeteer trên Ubuntu
Bài viết này sẽ hướng dẫn bạn từng bước để thiết lập một ứng dụng Node.js sử dụng Puppeteer trên hệ điều hành Ubuntu. Ứng dụng này sẽ hoạt động như một API cho phép bạn chụp ảnh màn hình bất kỳ trang web nào. Hãy cùng bắt đầu nhé!
1. Cập nhật và nâng cấp hệ thống
Để đảm bảo rằng tất cả các gói phần mềm trên hệ thống của bạn đều được cập nhật, hãy chạy lệnh sau:
bash
sudo apt update && sudo apt upgrade -y
2. Cài đặt Node.js và NPM
Để sử dụng Puppeteer, bạn cần cài đặt Node.js và npm. Thực hiện theo các bước sau để cài đặt chúng từ kho lưu trữ chính thức của Node.js:
bash
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs
Sau khi cài đặt hoàn tất, bạn có thể xác minh phiên bản cài đặt bằng các lệnh sau:
bash
node -v
npm -v
3. Tạo thư mục cho dự án
Tạo một thư mục mới cho dự án chụp ảnh màn hình của bạn:
bash
mkdir puppeteer-screenshot-api
cd puppeteer-screenshot-api
4. Khởi tạo dự án Node.js
Khởi động một dự án Node.js mới bằng cách chạy:
bash
npm init -y
Lệnh này sẽ tạo một tệp package.json
với các giá trị mặc định.
5. Cài đặt các phụ thuộc cần thiết
Cài đặt các thư viện cần thiết cho Puppeteer và Express để thiết lập API:
bash
npm install express puppeteer
6. Viết mã cho API chụp ảnh màn hình
Tạo một tệp có tên index.js
trong thư mục dự án và thêm đoạn mã sau:
javascript
const express = require('express');
const puppeteer = require('puppeteer');
const app = express();
const port = 3000;
// Điểm cuối chụp ảnh màn hình
app.get('/screenshot', async (req, res) => {
const { url } = req.query;
if (!url) {
return res.status(400).send('Vui lòng cung cấp một URL');
}
try {
const browser = await puppeteer.launch({
args: ['--no-sandbox', '--disable-setuid-sandbox'] // Cần thiết khi chạy Puppeteer trên Ubuntu
});
const page = await browser.newPage();
await page.goto(url, { waitUntil: 'networkidle2' });
const screenshot = await page.screenshot({ fullPage: true });
await browser.close();
// Thiết lập loại nội dung và gửi ảnh chụp màn hình
res.setHeader('Content-Type', 'image/png');
res.send(screenshot);
} catch (error) {
console.error(error);
res.status(500).send('Có lỗi xảy ra khi chụp ảnh màn hình');
}
});
app.listen(port, () => {
console.log(`API chụp ảnh màn hình Puppeteer đang chạy trên http://localhost:${port}`);
});
7. Chạy API Puppeteer
Để khởi động máy chủ, chạy lệnh sau:
bash
node index.js
Máy chủ hiện đã hoạt động tại http://localhost:3000
. Bạn có thể kiểm tra tính năng bằng cách truy cập URL:
http://localhost:3000/screenshot?url=https://example.com
Kết quả sẽ là một ảnh chụp màn hình định dạng PNG của trang web mà bạn đã cung cấp.
8. Cài đặt các phụ thuộc bổ sung của Puppeteer
Đôi khi, Puppeteer yêu cầu các thư viện bổ sung để chạy trên Ubuntu. Bạn có thể cài đặt chúng bằng lệnh:
bash
sudo apt install -y libxshmfence1 libasound2 libgbm-dev libgtk-3-0 libnss3 libxss1 libxtst6 xdg-utils
9. Cài đặt Puppeteer như một dịch vụ nền
Nếu bạn muốn API Puppeteer chạy ở chế độ nền và tự động khởi động sau khi reboot, hãy thiết lập nó như một dịch vụ systemd:
Tạo tệp dịch vụ cho API của bạn:
bash
sudo nano /etc/systemd/system/puppeteer-screenshot.service
Thêm nội dung sau vào tệp:
[Unit]
Description=API chụp ảnh màn hình Puppeteer
After=network.target
[Service]
ExecStart=/usr/bin/node /path/to/your/puppeteer-screenshot-api/index.js
Restart=on-failure
User=your-username
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
Lưu ý: Thay thế /path/to/your/puppeteer-screenshot-api/index.js
bằng đường dẫn thực tế của tệp index.js
trong dự án của bạn.
Kích hoạt và khởi động dịch vụ:
bash
sudo systemctl enable puppeteer-screenshot
sudo systemctl start puppeteer-screenshot
Bạn có thể kiểm tra trạng thái dịch vụ bằng lệnh:
bash
sudo systemctl status puppeteer-screenshot
10. Kiểm tra API
Giờ đây, bạn có thể gửi yêu cầu đến máy chủ để chụp ảnh màn hình dễ dàng bằng lệnh curl:
bash
curl "http://localhost:3000/screenshot?url=https://example.com" --output example.png
Lệnh này sẽ lưu ảnh chụp màn hình dưới dạng example.png
.
Hy vọng bài viết này sẽ giúp ích cho bạn trong việc thiết lập API chụp ảnh màn hình với Puppeteer trên Ubuntu!
source: viblo