{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-@l10n/zh/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Node.js Puppeteer 自动化","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"nodejs-puppeteer-自动化","__idx":0},"children":["Node.js Puppeteer 自动化"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["这是一个完整的可执行 Node.js 示例，演示如何通过本地 API 启动 MoreLogin 浏览器并使用 ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://pptr.dev/"},"children":["Puppeteer"]}," 连接到它。"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["注意"]},"：这需要 MoreLogin 客户端在本地运行并登录。"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"先决条件","__idx":1},"children":["先决条件"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"npm install puppeteer axios\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"示例脚本","__idx":2},"children":["示例脚本"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"javascript","header":{"controls":{"copy":{}}},"source":"const puppeteer = require(\"puppeteer\");\nconst axios = require(\"axios\");\n\n// Start a browser profile and return the debug port\nasync function getDebugPort(profileId) {\n  const url = `http://localhost:40000/api/env/start`;\n  \n  try {\n    const response = await axios.post(url, { envId: profileId });\n    if (response.data.code === 0) {\n      return response.data.data.debugPort;\n    } else {\n      console.error(`API Error: ${response.data.msg}`);\n      return -1;\n    }\n  } catch (error) {\n    console.error(`Request Failed: ${error.message}`);\n    return -1;\n  }\n}\n\n(async function run() {\n  // Replace with your actual profile ID\n  const profileId = \"1907751741233373184\"; \n  \n  const port = await getDebugPort(profileId);\n  if (port <= 0) {\n    console.log(\"Failed to start the environment\");\n    return;\n  }\n\n  console.log(`Connected to port: ${port}`);\n  \n  // Connect Puppeteer to the running instance via CDP\n  const browserURL = `http://127.0.0.1:${port}`;\n  const browser = await puppeteer.connect({ browserURL });\n  \n  // Create a new tab and automate\n  const page = await browser.newPage();\n  await page.goto(\"https://google.com\");\n  \n  console.log(`Page title: ${await page.title()}`);\n  \n  // Clean up\n  await browser.disconnect();\n  console.log(\"Disconnected from browser.\");\n})();\n","lang":"javascript"},"children":[]}]},"headings":[{"value":"Node.js Puppeteer 自动化","id":"nodejs-puppeteer-自动化","depth":1},{"value":"先决条件","id":"先决条件","depth":2},{"value":"示例脚本","id":"示例脚本","depth":2}],"frontmatter":{"seo":{"title":"Node.js Puppeteer 自动化"}},"lastModified":"2026-06-10T11:47:34.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/zh/api-reference/examples/puppeteer","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}