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