在服务器上运行 Puppeteer:完整教程

Puppeteer 是一个 Node.js 库,它提供了一个高级 API,用于通过 DevTools 协议控制 Chrome 或 Chromium 浏览器。它是一款功能强大的工具,可用于网页抓取、自动测试、截取屏幕截图等。虽然在本地使用 Puppeteer 很简单,但在服务器上运行它需要考虑其他事项。本指南将引导您完成在服务器上启动和运行 Puppeteer 的步骤。

为 Puppeteer 准备服务器

  • 更新服务器
  • 此步骤对于 Puppeteer 的成功执行至关重要。执行以下命令。

    sudo apt update -y
    sudo apt upgrade -y
  • 安装依赖项
  • 安装以下依赖项以确保 Puppeteer 顺利运行。

    sudo apt-get install libpangocairo-1.0-0 libx11-xcb1 libxcomposite1 libxcursor1 libxdamage1 libxi6 libxtst6 libnss3 libcups2 libxss1 libxrandr2 libatk1.0-0 libgtk-3-0 libasound2t64
  • 安装 Puppeteer
  • 执行以下命令来安装最新版本的 Puppeteer,为了获得最佳性能,始终建议安装该版本。

    npm i puppeteer

    使用 Puppeteer

    您可以使用以下代码片段通过在所需路由上调用此函数来验证 Puppeteer 是否正常运行。

    const puppeteer = require("puppeteer");
    
    /**
     * Launches a Puppeteer browser, navigates to a webpage, and then closes the browser.
     *
     * Launch Options:
     * - headless: Run the browser in headless mode (no GUI).
     * - args:
     *   - "--no-sandbox": Required if running as the root user.
     *   - "--disable-setuid-sandbox": Optional, try if you encounter sandbox errors.
     */
    
    const runPuppeteer = async () => {
      try {
        // Launch a Puppeteer browser instance with custom arguments
        const browser = await puppeteer.launch({
          headless: true,
          args: [
            "--no-sandbox",
            "--disable-setuid-sandbox",
          ],
        });
    
        // Open a new page in the browser
        const page = await browser.newPage();
    
        // Navigate to the specified URL
        await page.goto("https://www.google.com");
    
        console.log("Navigation to Google completed.");
    
        // Close the browser
        await browser.close();
        console.log("Browser closed successfully.");
      } catch (error) {
        console.error("An error occurred:", error);
      }
    };
    
    // Execute the function
    runPuppeteer();

    结论

    在服务器上运行 Puppeteer 需要仔细设置以处理依赖项、权限和资源。按照本指南操作,您可以有效地部署 Puppeteer 以在服务器环境中执行 Web 抓取或自动测试等任务。对于更高级的用例,请考虑使用 PM2 等工具进行流程管理,以及使用 Docker 进行容器化。

    请随意与他人分享本指南,如果您按照说明操作后遇到任何问题,请在评论中告诉我们。