puppeteer使用示例云顶之弈官网

自己从0到1开发的,微信小程序【云顶宝藏】求求点个5星好评吧!

需求:拿到所有英雄的信息

思路:点击每个英雄,进入英雄详情页,拿信息,并返回,继续下一个英雄**

最终效果


本地环境 window系统 node版本:v18.16.1

puppeteer技术文档: https://pptr.nodejs.cn/guides/query-selectors
示例源码下载:https://chaozhenrihuajianhang.oss-cn-hangzhou.aliyuncs.com/csdn/demo-puppeteer.zip

安装puppeteer

js 复制代码
npm install -g cnpm --registry=https://registry.npmmirror.com
cnpm install puppeteer

引入

js 复制代码
const puppeteer = require('puppeteer')

puppeteer使用

js 复制代码
const main = async () => {
	// 启动浏览器
	const browser = await puppeteer.launch({
		headless: false,
		defaultViewport: null,
		args: ['--start-maximized'],
		ignoreDefaultArgs: ['--enable-automation']
	});  
	// 创建一个新页面  
	const page = await browser.newPage();  
	// 获取Vue组件的HTML
	// const html = await page.evaluate(() => document.querySelector('#app').innerHTML)
	
	// 同步英雄
	await initYingxiong(page)
	
	// 截取网页的屏幕截图
	// await page.screenshot({path: 'example.png'});
	// 关闭浏览器  
	await browser.close();
}
js 复制代码
const initYingxiong = async (page) => {
	// 访问一个网址  
	await page.goto('https://lol.qq.com/tft/#/champion');
	// 等待Vue组件加载完毕
	await page.waitForSelector('#app');
	// 延迟1秒
	await new Promise(resolve => setTimeout(resolve, 1000))
	await setYingxiong(page)
}
js 复制代码
const setYingxiong= async (page) => {
	// 获取所有英雄的dom元素
	const elements = await page.$$('.champion-list .champion-item-big');
	for (let i = 0; i < elements.length; i++) {
	  // 点击每个英雄,进入英雄详情
	  await elements[i].click()
	
	  // 获取父容器
	  const obj = await page.$('.champion-detail-info')
	  // 费用
	  const grade = await obj.$eval('.component-champion .champion-price', node => node.innerText)
	  // 头像
	  const head_image = await obj.$eval('.component-champion .champion-pic img', node => node.src)
	  // 背景头像
	  let bg_image = await obj.$eval('.detail-info-1 .champion-big-pic', node => node.style.backgroundImage)
	  bg_image = bg_image.replace('url("', 'https:')
	  bg_image = bg_image.replace('")', '')
	  // 名称
	  const name = await obj.$eval('.champion-name', node => node.innerText)
	  const nameArr = name.split(' ')
	  // 技能图
	  const skill_image = await obj.$eval('.champion-skill .skill-pic img', node => node.src)
	  // 技能名称
	  const skill_name = await obj.$eval('.champion-skill .skill-txt .skill-name', node => node.innerText)
	  // 技能被动或主动
	  const skill_trigger = await obj.$eval('.champion-skill .skill-txt .skill-type', node => node.innerText)
	  // 技能描述
	  const skill_details = await obj.$eval('.champion-skill .skill-desc', node => node.innerText)
	  // 羁绊图片
	  const jibanImg = await obj.$$eval('.detail-info-3 img', node => node.map(n => n.src))
	  // 属性
	  let jibenshuxing = await obj.$eval('.detail-info-2 .detail-info-desc', node => node.innerText)
	  jibenshuxing = jibenshuxing.split('\n').map(i => i.replace(':', '/')).map(i => i.split('/'))
	
	  let info = {
		grade,
		head_image,
		name,
		nameArr,
		skill_image,
		skill_name,
		skill_trigger,
		skill_details,
		jibanImg,
		jibenshuxing
	  }
	  // 跑数据库逻辑
	  if (false) {
	    console.log('【英雄】已存在执行修改', info)
	  } else {
	    console.log('【英雄】不存在执行新增', info)
	  }
	
	  // 点击右上角返回,英雄列表
	  const search_btn = await page.$(`.page-btn-title:nth-child(2)`)
	  await search_btn.click()
	}
}

请开始你的表演...

相关推荐
福兮说6 小时前
设计稿是 #4A7C6F,页面量出来是 #4B7C6F:HEX、HSL、透明度、canvas 来回转的七个坑
前端·javascript·css·canvas
郑州光合科技余经理6 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
小呆呆6667 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
Dovis(誓平步青云)7 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
码艺-Alimjan8 小时前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
可乐鸡翅yeah_9 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒9 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
广州华水科技9 小时前
大坝安全监测解决方案:单北斗GNSS形变监测系统应用与维护
前端
yivifu10 小时前
中文古籍电子书注释集成
前端·javascript·python·beautifulsoup·epub
默_笙10 小时前
🛴 从散件到整机:DeepAgents 与 Agent 身上预留的那些"插槽"(前置介绍)
前端·javascript