06. tháng 2 2025
Puppeteer là một từ tiếng Anh, có nghĩa là người điều khiển rối. Nó khiến tôi liên tưởng đến bộ phim hoạt hình Naruto nổi tiếng...
Puppeteer là một dự án mã nguồn mở do Google phát triển.
Puppeteer cung cấp một thư viện dành cho Node.js để kiểm soát Chrome hoặc Chromium thông qua giao thức DevTools.
Ưu điểm:
Nhược điểm:
Tôi muốn tạo một phiên bản di động... hoặc ứng dụng WeChat Mini Program.
Phiên bản node cần phải là v7.6.0 trở lên. Để cài đặt nhiều phiên bản Node.js trên Ubuntu, bạn có thể tham khảo cách sử dụng NVM.
nvm install v9.5.0
Sau khi cài đặt Node.js, hãy thực hiện lệnh sau trong thư mục gốc của dự án:
npm i --save puppeteer
% npm i --save puppeteer
> puppeteer@1.0.0 install /home/zhongwei/work/puppeteer/node_modules/puppeteer
> node install.js
LỖI: Không tải xuống được Chromium r526987! Đặt biến môi trường "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" để bỏ qua việc tải xuống.
Từ thông báo lỗi, dường như máy đã bị chặn bởi hiệu trưởng Phương. Vì máy phát triển Ubuntu của tôi đã cài đặt sẵn phiên bản mới nhất của Chromium, tôi cảm thấy không cần thiết phải tải lại.
env PUPPETEER_SKIP_CHROMIUM_DOWNLOAD="true" npm i --save puppeteer
> puppeteer@1.0.0 install /home/zhongwei/work/puppeteer/node_modules/puppeteer
> node install.js
**THÔNG BÁO** Bỏ qua việc tải xuống Chromium. Biến môi trường "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" đã được tìm thấy.
npm WARN saveError ENOENT: không tìm thấy tập tin hoặc thư mục, mở '/home/zhongwei/work/puppeteer/package.json'
npm notice đã tạo một tệp khóa dưới dạng package-lock.json. Bạn nên commit tệp này.
npm WARN enoent ENOENT: không tìm thấy tập tin hoặc thư mục, mở '/home/zhongwei/work/puppeteer/package.json'
npm WARN puppeteer Không có mô tả
npm WARN puppeteer Không có trường repository.
npm WARN puppeteer Không có dữ liệu README
npm WARN puppeteer Không có trường license.
+ puppeteer@1.0.0
đã thêm 1 gói trong 0.924s
Tuy nhiên, cách làm này không hoạt động... Chương trình kiểm tra vẫn báo lỗi
node run.js
(node:25615) UnhandledPromiseRejectionWarning: AssertionError [ERR_ASSERTION]: Phiên bản Chromium chưa được tải xuống. Chạy "yarn install" hoặc "npm install"
Tôi đã chỉ định đường dẫn trong mã nhưng vẫn báo lỗi
const browser = await puppeteer.launch({executablePath: '/usr/bin/chromium-browser'});
Thông báo lỗi
node run.js
(node:29853) UnhandledPromiseRejectionWarning: Error: Hết thời gian sau 30000 ms khi cố gắng kết nối với Chrome! Phiên bản Chromium duy nhất được đảm bảo hoạt động là r526987
Rõ ràng, chỉ có phiên bản Chromium cụ thể mới có thể sử dụng Puppeteer. Theo tài liệu phát hành Puppeteer 1.0, chỉ phiên bản 65 r526987 được hỗ trợ, trong khi phiên bản cục bộ của tôi là 59... Tôi đột nhiên phát hiện ra rằng cnpm có thể đại diện tải xuống Chromium r526987... Thật đáng kinh ngạc!
cnpm install puppeteer
✔ Đã cài đặt 1 gói
✔ Liên kết 39 phiên bản mới nhất
Đang tải Chromium r526987 - 97.1 Mb [====================] 100% 0.0s
Chromium đã được tải về /home/zhongwei/work/puppeteer/node_modules/_puppeteer@1.0.0@puppeteer/.local-chromium/linux-526987
✔ Chạy 1 kịch bản
✔ Tất cả các gói đã được cài đặt (41 gói đã được cài đặt từ npm registry, sử dụng 17s, tốc độ 27.52kB/s, json 45(68.11kB), tarball 406.4kB)
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('
await page.screenshot({path: 'example.png'});
await browser.close();
})();
Báo lỗi
async () => {
^
Cú pháp sai: Token không mong đợi
Thì ra, phiên bản Node mặc định trên Ubuntu của tôi là 6.10.0, không hỗ trợ từ khóa async, cần chuyển sang 9.5.0
nvm use 9.5.0
Sau khi thực thi, bạn sẽ thấy ảnh chụp màn hình đã được tạo!
sudo apt install -y gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
Cài đặt font chữ Trung Quốc là đủ để giải quyết vấn đề
$ sudo apt-get install language-pack-zh-hant language-pack-zh-hans
$ sudo apt-get install fonts-droid-fallback ttf-wqy-zenhei ttf-wqy-microhei fonts-arphic-ukai fonts-arphic-uming
Thêm trước goto
await page.setRequestInterception(true);
page.on('request', request => {
if (request.resourceType() === 'script')
request.abort();
else
request.continue();
});
fullPage: true Ví dụ:
await page.screenshot({path: 'rank.png', fullPage: true});