Skip to content
Last updated

Ví dụ về tự động hóa (CDP)

Khi đại lý của bạn đã bắt đầu hồ sơ MoreLogin thông qua Kỹ năng, đại lý sẽ nhận được debugPort. Bạn có thể sử dụng cổng này để kết nối trực tiếp với phiên bản trình duyệt bằng cách sử dụng CDP (Giao thức DevTools của Chrome), bỏ qua nhu cầu về WebDriver.

Bạn có thể hướng dẫn tác nhân Hermes hoặc OpenClaw của mình viết và thực thi các tập lệnh bằng các mẫu sau.

1. Kết nối với nghệ sĩ múa rối

// Get debugPort from:
// openclaw morelogin browser status --env-id <envId>
const puppeteer = require('puppeteer-core');

async function main() {
  const browser = await puppeteer.connect({
    browserURL: 'http://127.0.0.1:9222', // replace 9222 with actual debugPort
    defaultViewport: null
  });

  const pages = await browser.pages();
  const page = pages[0];
  await page.goto('https://example.com');
  
  // Scrape data or perform actions
  const title = await page.title();
  console.log('Title:', title);
  
  // NOTE: Do not call browser.close() unless you want to destroy the MoreLogin process
  await browser.disconnect();
}
main();

2. Điền và gửi biểu mẫu

const puppeteer = require('puppeteer-core');

async function main() {
  const browser = await puppeteer.connect({
    browserURL: 'http://127.0.0.1:<debugPort>'
  });
  
  const page = await browser.newPage();
  await page.goto('https://example.com/login');
  
  // Fill form
  await page.type('#username', 'myuser');
  await page.type('#password', 'mypassword');
  
  // Click submit
  await page.click('button[type="submit"]');
  
  // Wait for navigation
  await page.waitForNavigation();
  
  // Verify login
  const isLoggedIn = await page.$('.user-profile');
  console.log('Login successful:', !!isLoggedIn);
  
  await browser.disconnect();
}
main();

3. Quét dữ liệu

const puppeteer = require('puppeteer-core');
const fs = require('fs');

async function main() {
  const browser = await puppeteer.connect({
    browserURL: 'http://127.0.0.1:<debugPort>'
  });
  
  const page = await browser.newPage();
  await page.goto('https://example.com/products');
  
  // Scrape data
  const products = await page.evaluate(() => {
    return Array.from(document.querySelectorAll('.product')).map(el => ({
      name: el.querySelector('.name')?.textContent,
      price: el.querySelector('.price')?.textContent,
      url: el.querySelector('a')?.href
    }));
  });
  
  // Save to file
  fs.writeFileSync('products.json', JSON.stringify(products, null, 2));
  console.log(`Scraped ${products.length} products`);
  
  await browser.disconnect();
}
main();

4. Thao tác nhiều tab

const puppeteer = require('puppeteer-core');

async function main() {
  const browser = await puppeteer.connect({
    browserURL: 'http://127.0.0.1:<debugPort>'
  });
  
  // Open multiple tabs
  const page1 = await browser.newPage();
  const page2 = await browser.newPage();
  
  await page1.goto('https://example.com');
  await page2.goto('https://github.com');
  
  // Parallel operations
  await Promise.all([
    page1.screenshot({ path: 'page1.png' }),
    page2.screenshot({ path: 'page2.png' })
  ]);
  
  console.log('Screenshots completed');
  
  await browser.disconnect();
}
main();

Khắc phục sự cố

  • Lỗi: connect ECONNREFUSED: Đảm bảo cấu hình đang chạy và debugPort chính xác. Bạn có thể xác minh cổng bằng lsof -i :<port>.
  • Sự cố trình duyệt khi kết nối: Sử dụng puppeteer-core thay vì puppeteer và đảm bảo bạn gọi browser.disconnect() thay vì browser.close() khi tập lệnh của bạn kết thúc.