最近,感到有点愧疚。因为今年6.18给自己买了一个玩具——电视机顶盒。打算将它刷成Linux系统,弄成一个低配的NAS来玩。刷好系统没玩两天,便转而去折腾别的东西了。不出意外地,它就只能躺在那儿吃灰了。
国庆假期,闲着也是闲着。不如弄点东西上去继续折腾一下,好让它体现价值,以弥补我的愧疚。之前,我在macos上写个puppeteer-core的脚本,想尝试移植到NAS上。如果成功了,那么它便可以挂机帮我配脚本了。
开始之前,先做两个小科普,以免小伙伴掉队。
什么是Armbian?
系统是一款专为ARM芯片设计的轻量级Linux系统,基于广受欢迎的Debian/Ubuntu构建。它不仅继承了这两个系统的所有功能和丰富的软件生态,还特别优化了性能,确保系统运行在TF/SD/USB及设备的eMMC中时,既安全又稳定。此外,Armbian项目还扩展了对一些非官方支持设备的支持,如电视盒子,使其能够变身为功能强大的服务器。
什么是puppeteer-core?
Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。Puppeteer 默认以 headless 模式运行,但是可以通过修改配置文件运行“有头”模式。
puppeteer-core
是一个的轻量级的 Puppeteer 版本,用于启动现有浏览器安装或连接到远程安装。
开始
1、安装node.js
要求:node.js >= v18.x
apt install nodejs
node -v
做Node.JS开发测试,NPM也不能少
apt install npm
npm -v
# 配置一下国内源
npm config set registry https://registry.npmmirror.com/
2、安装chromium
apt update
apt install chromium
有时会因为依赖库的安装问题,安装chromium会不成功,多试几次好像就可以。我暂时没能找到重现的规律,可能是aliyun的apt源又问题,换了清华的再试就成功了。
3、创建项目
创建项目目录
mkdir myapp cd myapp
写入
package.json
touch package.json
写入内容:
{ "name": "my-puppeteer-app", "version": "1.0.0", "description": "puppeteer.core Test App", "dependencies": { "puppeteer-core": "^23.4.1" } }
安装项目依赖
npm install
4、创建脚本
touch main.mjs
脚本内容:
import puppeteer from 'puppeteer-core';
(async () => {
// Launch the browser and open a new blank page
const browser = await puppeteer.launch({
headless: true,
executablePath:'/usr/lib/chromium/chromium',
defaultViewport: {width: 1280, height: 960},
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
const page = await browser.newPage();
//await page.setUserAgent("");
console.log("start...");
// Navigate the page to a URL.
await page.goto('https://blog.chenreal.com/');
// Set screen size.
await page.setViewport({width: 1080, height: 1024});
// Type into search box.
await page.locator('#search-kw').fill('mysql');
await page.locator('#search-btn').click();
await page.waitForNavigation();
let mainSections = await page.$('div.main');
console.log(mainSections);
const text = await mainSections?.evaluate(el => el.textContent);
console.log(text);
await browser.close();
})();
注意:puppeteer-core
是没有自带chrome浏览器的版本,所以需要用参数executablePath
来指定浏览器的执行文件的路径。在Armbian系统下,chromium安装的路径是/usr/lib/chromium/chromium
,如果是其他操作系统未必一定是这个,请自行查找。
5、运行脚本
node main.mjs
总结
我在一个网络机顶盒改造Armbian Linux系统上安装好了,Node.js、chromium浏览器。然后成功地将在macos写的puppeteer-core
脚本移植到该环境上运行。接下来,我变可以通过脚本驱动浏览器,访问系统站点,玩很多东西:例如:帮我爬页面数据、帮我系统界面流程测试、做监控后台状态等等。一句话,盒子终于有用武之地,不必被吃灰了!