const Nightmare = require('nightmare'); // 堆代码 duidaima.com (async () => { const nightmare = Nightmare(); await nightmare .goto('https://www.example.com') .evaluate(() => ({ title: document.title, content: document.body.innerText })) .then(result => { console.log('Title:', result.title); console.log('Content:', result.content); }); await nightmare.end(); })();示例二:抓取列表项
const Nightmare = require('nightmare'); (async () => { const nightmare = Nightmare(); await nightmare .goto('https://www.example.com/products') .evaluate(() => { const products = []; const productElements = document.querySelectorAll('div.product'); productElements.forEach(element => { products.push({ name: element.querySelector('h2').innerText, price: element.querySelector('.price').innerText, description: element.querySelector('p.description').innerText }); }); return products; }) .then(products => { console.log(products); }); await nightmare.end(); })();示例三:处理分页
const Nightmare = require('nightmare'); (async () => { const nightmare = Nightmare(); let page = 1; const maxPages = 5; const allProducts = []; while (page <= maxPages) { const products = await nightmare .goto(`https://www.example.com/products?page=${page}`) .evaluate(() => { const products = []; const productElements = document.querySelectorAll('div.product'); productElements.forEach(element => { products.push({ name: element.querySelector('h2').innerText, price: element.querySelector('.price').innerText, description: element.querySelector('p.description').innerText }); }); return products; }); allProducts.push(...products); page++; } console.log(allProducts); await nightmare.end(); })();优点
5.异步编程支持:Nightmare的API设计与现代异步编程模式(如Promises和async/await)兼容,使得管理复杂的抓取工作流更加容易。