使用Puppeteer(JS)抓取无类名页面:获取红色标记数值方法
如何用Puppeteer获取目标页面红色标记的数值
你需要获取目标页面中红色标记的战斗统计数值(如击杀、死亡类数据),现有Puppeteer代码框架,可通过以下方式补充注释处的代码逻辑:
方案1:批量提取所有统计数值
如果需要一次性获取所有红色标记类的统计项,可通过页面上下文解析容器内的表格行:
// 替换注释处的代码 const statsData = await charts.evaluate(element => { const statRows = element.querySelectorAll('tr'); const result = {}; statRows.forEach(row => { // 获取标签文本(如“击杀”“死亡”) const label = row.querySelector('td:first-child')?.textContent.trim(); // 获取对应的数值(红色标记的部分) const value = row.querySelector('td:last-child b')?.textContent.trim(); if (label && value) { result[label] = value; } }); return result; }); console.log('获取到的统计数据:', statsData);
方案2:精准提取单个目标数值
如果只需要某一个特定的数值(比如红色标记的“击杀”数),可以直接定位对应元素:
// 替换注释处的代码,以“击杀”为例 const targetValue = await charts.$eval('tr:has(td:contains("击杀")) td:last-child b', el => el.textContent.trim()); console.log('击杀数值:', targetValue);
代码优化建议
你的原代码循环只处理第一个.BoxContent就终止了,如果目标统计容器确实是第一个,逻辑没问题;如果需要匹配特定的容器,可以调整为直接定位,不用循环:
// 直接定位目标容器,替代原循环逻辑 const targetContainer = await page.$('.BoxContent'); if (targetContainer) { const stats = await targetContainer.evaluate(el => { const rows = el.querySelectorAll('tr'); const data = {}; rows.forEach(row => { const labelCell = row.querySelector('td:nth-child(1)'); const valueCell = row.querySelector('td:nth-child(2) b'); if (labelCell && valueCell) { data[labelCell.textContent.trim()] = valueCell.textContent.trim(); } }); return data; }); console.log('统计数据:', stats); }
内容的提问来源于stack exchange,提问作者user2774657
相关产品推荐
相关产品推荐

