Armbian环境下跑puppeteer-core脚本

时间:10/06/2024 16:57:58   作者:ChenReal    阅读:9

最近,感到有点愧疚。因为今年6.18给自己买了一个玩具——电视机顶盒。打算将它刷成Linux系统,弄成一个低配的NAS来玩。刷好系统没玩两天,便转而去折腾别的东西了。不出意外地,它就只能躺在那儿吃灰了。

image.png

国庆假期,闲着也是闲着。不如弄点东西上去继续折腾一下,好让它体现价值,以弥补我的愧疚。之前,我在macos上写个puppeteer-core的脚本,想尝试移植到NAS上。如果成功了,那么它便可以挂机帮我配脚本了。

开始之前,先做两个小科普,以免小伙伴掉队。

什么是Armbian?

系统是一款专为ARM芯片设计的轻量级Linux系统,基于广受欢迎的Debian/Ubuntu构建。它不仅继承了这两个系统的所有功能和丰富的软件生态,还特别优化了性能,确保系统运行在TF/SD/USB及设备的eMMC中时,既安全又稳定。此外,Armbian项目还扩展了对一些非官方支持设备的支持,如电视盒子,使其能够变身为功能强大的服务器。

armbian-2.jpg

什么是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脚本移植到该环境上运行。接下来,我变可以通过脚本驱动浏览器,访问系统站点,玩很多东西:例如:帮我爬页面数据、帮我系统界面流程测试、做监控后台状态等等。一句话,盒子终于有用武之地,不必被吃灰了!

 

评论
0/200