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()
	}
}

请开始你的表演...

相关推荐
并不会39 分钟前
常见 CSS 选择器用法
前端·css·学习·html·前端开发·css选择器
衣乌安、42 分钟前
【CSS】居中样式
前端·css·css3
兔老大的胡萝卜42 分钟前
ppk谈JavaScript,悟透JavaScript,精通CSS高级Web,JavaScript DOM编程艺术,高性能JavaScript pdf
前端·javascript
低代码布道师1 小时前
CSS的三个重点
前端·css
耶啵奶膘2 小时前
uniapp-是否删除
linux·前端·uni-app
王哈哈^_^4 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
cs_dn_Jie4 小时前
钉钉 H5 微应用 手机端调试
前端·javascript·vue.js·vue·钉钉
开心工作室_kaic5 小时前
ssm068海鲜自助餐厅系统+vue(论文+源码)_kaic
前端·javascript·vue.js
有梦想的刺儿5 小时前
webWorker基本用法
前端·javascript·vue.js
cy玩具5 小时前
点击评论详情,跳到评论页面,携带对象参数写法:
前端