Puppeteer
约 3 分钟阅读
- puppeteerGitHubpuppeteer/puppeteerpuppeteer · Chrome Devtools Protocol 客户端 · 参考 · 使用了 Chrome for Testing · Alpine 下有问题 #7746 · 在 Alpine 下额外安装,然后配置 PUPPETEEREXECUTABLEPATH笔记:Puppeteer
- Chrome Devtools Protocol笔记HeadlessDevToolsActivePort · 第一行为端口 · 第二行为 路径 · https://blog.logrocket.com/playwright-vs-puppeteer/ · Chrome 112+ · 支持 · --dump-dom打开:/notes/web/browser/chrome/headless 客户端
- 参考
- 使用了 Chrome for Testing笔记Chrome for testing不自动更新 · 支持旧版本下载 · 参考 · https://googlechromelabs.github.io/chrome-for-testing/ · https://developer.chrome.com/blog/chrome-for-testing/打开:/notes/web/browser/chrome/for-testing
- Alpine 下有问题 #7746GitHub Issuepuppeteer/puppeteer#7746
- 在 Alpine 下额外安装,然后配置 PUPPETEER_EXECUTABLE_PATH
- 保持浏览器运行 #8261GitHub Issuepuppeteer/puppeteer#8261
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
.editorvar 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 - 当前主窗口
- 事件
# 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- 127.0.0.1/json/version
- 默认使用 --remote-debugging-port=0
- 随机 port
- puppeteer/puppeteer/docs/api.mdGitHub Filepuppeteer/puppeteer/docs/api.md
// 获取当前的 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_DOWNLOADPUPPETEER_DOWNLOAD_HOST-> PUPPETEER_DOWNLOAD_BASE_URLPUPPETEER_CHROMIUM_REVISION-> PUPPETEER_BROWSER_REVISION
puppeteer_download_base_url="https://cdn.npmmirror.com/binaries/chrome-for-testing"npx @puppeteer/browsers --helpadblock
npm add puppeteer-extra puppeteer-extra-plugin-adblockerPackagespuppeteer-extranpm Packagepuppeteer-extraNPMpuppeteer-extra-plugin-adblockernpm Packagepuppeteer-extra-plugin-adblockerNPM
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
- @puppeteer/browsers
- puppeteer-core
- CDP API
- launch & connect
- launch 通过
@puppeteer/browsers启动
FAQ
Docker user
addgroup -S pptruser
adduser -S -g pptruser pptruser
mkdir -p /home/pptruser/Downloads /app
chown -R pptruser:pptruser /home/pptruser
chown -R pptruser:pptruser /appAlpineLinux musl
默认下载的不支持
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- puppeteer/puppeteer/docs/troubleshooting.md#running-on-alpineGitHub Filepuppeteer/puppeteer/docs/troubleshooting.md#running-on-alpine
apk add chromium chromium-lang
# chromium-chromedrivervar 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
- --no-sandbox
- SYS_ADMIN
- seccomp
- Zenika/alpine-chrome#109GitHub IssueZenika/alpine-chrome#109
- Zenika/alpine-chrome/examples/k8s/deployment.ymlGitHub FileZenika/alpine-chrome/examples/k8s/deployment.yml
Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
apk add dbus
service dbus startThe profile appears to be in use by another Chromium process on another computer
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.# $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 条
- ghostery/adblockergithub.com/ghostery/adblocker
- puppeteer/puppeteergithub.com/puppeteer/puppeteer
- puppeteer/puppeteer/docs/api.mdgithub.com/puppeteer/puppeteer/blob/v14.4.1/docs/api.md
- puppeteer/puppeteer/docs/troubleshooting.md#running-on-alpinegithub.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md
- puppeteer/puppeteer/packages/browsers/src/detectPlatform.tsgithub.com/puppeteer/puppeteer/blob/main/packages/browsers/src/detectPlatform.ts
- puppeteer/puppeteer/packages/browsers/src/launch.tsgithub.com/puppeteer/puppeteer/blob/main/packages/browsers/src/launch.ts
- puppeteer/puppeteer/packages/puppeteer-core/src/node/ProductLauncher.tsgithub.com/puppeteer/puppeteer/blob/main/packages/puppeteer-core/src/node/ProductLauncher.ts
- puppeteer/puppeteer#7746github.com/puppeteer/puppeteer/issues/7746
- puppeteer/puppeteer#8261github.com/puppeteer/puppeteer/issues/8261
- Zenika/alpine-chrome/examples/k8s/deployment.ymlgithub.com/Zenika/alpine-chrome/blob/master/examples/k8s/deployment.yml
- Zenika/alpine-chrome#109github.com/Zenika/alpine-chrome/issues/109
其他外链4 条
- 127.0.0.1/json/version127.0.0.1:9222/json/version
- googlechromelabs.github.io/chrome-for-testing/last-known-good-versions.jsongooglechromelabs.github.io/chrome-for-testing/last-known-good-versions.json
- pptr.dev/browsers-apipptr.dev/browsers-api
- raw.githubusercontent.com/cliqz-oss/adblocker/master/packages/adblocker/assets/easylist/easylistgermany.txtraw.githubusercontent.com/cliqz-oss/adblocker/master/packages/adblocker/assets/easylist/easylistgermany.txt