Wener Notes

Puppeteer

约 3 分钟阅读
  • puppeteerGitHubpuppeteer/puppeteerpuppeteer · Chrome Devtools Protocol 客户端 · 参考 · 使用了 Chrome for Testing · Alpine 下有问题 #7746 · 在 Alpine 下额外安装,然后配置 PUPPETEEREXECUTABLEPATH笔记:Puppeteer
  • 参考
bash
npm add puppeteer

# linux 依赖
apk add nss nspr at-spi2-atk cups-libs libxcomposite mesa-gbm libxkbcommon pango cairo alsa-lib
# at-spi2-core

# Linux 环境使用
export DISPLAY=:1

node
.editor
Packagespuppeteernpm PackagepuppeteerNPM
JavaScript
var puppeteer = await import('puppeteer');
var browser = await puppeteer.launch();
var page = await browser.newPage();
  • Browser
    • 事件
      • disconnected
      • targetchanged - URL 变化
      • targetcreated - 例如 window.open, browser.newPage
      • targetdestroyed
    • BrowserContext
      • 事件: targetchanged, targetcreated, targetdestroyed
      • 可以创建 incognito 上下文
      • Target - page, background_page, service_worker, shared_worker, other, browser, webview
      • Page - 正常网页
        • Frame
        • mainFrame - 当前主窗口
bash
# macOS 手动启动
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 --no-first-run --no-default-browser-check --user-data-dir=$(mktemp -d -t 'chrome-remote_data_dir')

# Windows
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222
JavaScript
// 获取当前的 ws url
browser.wsEndpoint();

browser

  • ~/.cache/puppeteer/chrome
  • PUPPETEER_SKIP_DOWNLOAD=true
    • 避免下载
  • PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
  • PUPPETEER_DOWNLOAD_BASE_URL
  • PUPPETEER_SKIP_CHROMIUM_DOWNLOAD -> PUPPETEER_SKIP_DOWNLOAD
  • PUPPETEER_DOWNLOAD_HOST -> PUPPETEER_DOWNLOAD_BASE_URL
  • PUPPETEER_CHROMIUM_REVISION -> PUPPETEER_BROWSER_REVISION
.npmrc
puppeteer_download_base_url="https://cdn.npmmirror.com/binaries/chrome-for-testing"
bash
npx @puppeteer/browsers --help

adblock

bash
npm add puppeteer-extra puppeteer-extra-plugin-adblocker
JavaScript
const puppeteer = require('puppeteer-extra');

// Add adblocker plugin, which will transparently block ads in all pages you
// create using puppeteer.
const { DEFAULT_INTERCEPT_RESOLUTION_PRIORITY } = require('puppeteer');
const AdblockerPlugin = require('puppeteer-extra-plugin-adblocker');
puppeteer.use(
  AdblockerPlugin({
    // Optionally enable Cooperative Mode for several request interceptors
    interceptResolutionPriority: DEFAULT_INTERCEPT_RESOLUTION_PRIORITY,
  }),
);

添加扩展

  • --disable-extensions-except=/path/to/extension
  • --load-extension=/path/to/extension

Notes

FAQ

Docker user

bash
addgroup -S pptruser
adduser -S -g pptruser pptruser
mkdir -p /home/pptruser/Downloads /app
chown -R pptruser:pptruser /home/pptruser
chown -R pptruser:pptruser /app

AlpineLinux musl

默认下载的不支持

bash
Error relocating /chrome-linux/chrome: __mbrlen: symbol not found
Error relocating /chrome-linux/chrome: __close: symbol not found
Error relocating /chrome-linux/chrome: initstate_r: symbol not found
Error relocating /chrome-linux/chrome: random_r: symbol not found
bash
apk add chromium chromium-lang
# chromium-chromedriver
JavaScript
var browser = await puppeteer.launch({
  executablePath: '/usr/bin/chromium-browser',
  headless: false,
  args: ['--no-sandbox', '--disable-gpu'],
});
  • root 必须要 --no-sandbox

Failed to adjust OOM score of renderer with pid 799: Permission denied

Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory

bash
apk add dbus
service dbus start

The profile appears to be in use by another Chromium process on another computer

text
The profile appears to be in use by another Chromium process on another computer. Chromium has locked the profile so that it doesn't get corrupted. If you are sure no other processes are using this profile, you can unlock the profile and relaunch Chromium.
bash
# $DataDir/Singleton*
rm -rf ~/.config/chromium/Singleton*
  • SingletonSocket
  • SingletonLock
  • SingletonCookie

Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")

关联信息

反向链接、本文链接的其他页面和外部资料。

站内链接

  • Chrome for testing
    笔记 · Chrome for Testing

    不自动更新 · 支持旧版本下载 · 参考 · https://googlechromelabs.github.io/chrome-for-testing/ · https://developer.chrome.com/blog/chrome-for-testing/

  • Headless
    笔记 · Chrome Devtools Protocol

    DevToolsActivePort · 第一行为端口 · 第二行为 路径 · https://blog.logrocket.com/playwright-vs-puppeteer/ · Chrome 112+ · 支持 · --dump-dom

References

GitHub11 条
其他外链4 条
最近更新commit ef1d424Edit

On this page