首页 > 解决方案 > 使用 puppeteer 和 NodeJs 抓取时如何获取 div 标签的内容

问题描述

我听说过这个叫做 puppeteer 的库,它在抓取网页时很有用。所以我决定抓取一个游戏网站的内容,这样我就可以存储它的数据并在以后浏览它。

但是在我复制了 div 标签的 XPATH 之后,我希望 puppeteer 抓取它的内容,它返回的空字符串请我做错了什么。

这是我试图在这里抓取的网址

我想刮掉显示 6 个不同颜色球的结果的 div 标签。所以我可以每 45 秒得到这些颜色的数量。

const puppeteer = require("puppeteer");

async function scrapeData(url){
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(url);

const [dataReceived] = await page.$x('/html/body/div[1]/div/div/div/footer/div[2]/div[1]/div/div[1]/div[2]/div/div');
const elContent = await dataReceived.getProperty('textContent');
const elValue = await elContent.jsonValue();
console.log({elValue});
//console.log(elContent);
//console.log(dataReceived)
browser.close();
}
scrapeData("https://logigames.bet9ja.com/Games/Launcher?gameId=11000&provider=0&sid=&pff=1&skin=201");
console.log("just testing");

这是在 vscode 终端中返回的空字符串的图像

在此处输入图像描述

标签: javascriptnode.jspuppeteer

解决方案


您可以使用更简单的选择器,而不是page.$x在这里使用,这将不那么脆弱。尝试page.$('.ball-value'),或者可能page.waitForSelector('.ball-value')处理过渡时间。使用更简单的选择器在该页面上进行测试似乎有效。如果你想获得所有的球值而不仅仅是第一个,有page.$$(这与document.querySelectorAll, so it would return an array of elements).


推荐阅读