Puppeteer
一个npm包,拥有很多功能:
- 支持分布式爬取
- 实现了深度优先和广度优先算法
- 支持csv和json line格式导出
- 插件式的结果存储,比如支持redis
- 自动插入jquery,可以使用jquery语法进行结果处理
- 支持截图作为爬取证据
- 支持模拟不同的设备
自动化UI测试
安装Puppeteer :
Puppeteer的包很大,足足100MB,因为他内置了Chromium(谷歌浏览器),所以适合用pnpm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| import puppeteer from "puppeteer"
const sleep = (time: number) => { return new Promise((resolve, reject)=> { setTimeout(resolve,time) }) }
(async () => { const browser = await puppeteer.launch({ headless: false, defaultViewport: null, args: ["--start-maximized"] })
const page = await browser.newPage() await page.goto("https://jd.com") await page.focus("#key") await page.keyboard.sendCharacter("iphone14") await page.click(".button") await page.waitForSelector(".gl-item")
let isScroll = true let step = 500 while(isScroll) { isScroll = await page.evaluate((step)=> { let scrollTop = document.scrollingElement?.scrollTop ?? 0 document.scrollingElement!.scrollTop = scrollTop+step return document.body.clientHeight > scrollTop+2080 ? true: false },step)
await sleep(500) }
await page.screenshot({ path: "iphone14.png", fullPage: true })
})()
|
puppeteer截的(好大一张)图