cheerio .text() returns 空字符串

cheerio .text() returns empty string

我正在尝试使用节点 js 和 cheerio 抓取 这个 html 以从 span 标签中获取 72。但是,当我将选择器放入 returns nothing (empty string).

在这种情况下,我想要 span 标签中的 72,我会将部分代码和选择器放在下面:

首先,网站 html:


<li id="TonerSupplies" data-node="TonerSupplies" class="child-row">
<div class="supplyStatusContainer" data-init="initSupplyStatusContainer(this)">
<div class="contentRow" role="gridcell">
<div class="contentHeader" role="heading">
<span class="translated" data-textid="67527" tabindex="-1">
Black Cartridge
</span>
<br>
</div>
<div class="contentBody" role="presentation">
<div class="progress" role="presentation" tabindex="" data-deviceid="8-1">
<div class="progress-inner BlackGauge" role="img" title="72%" aria-labelledby="72%">
<div class="progress-slider" style="width: 166px; overflow: hidden;">
<span class="dataText">72</span>
</div>
</div> </div>
</div>
</div>
</div>
</li>

在我 post 这个问题之前,我真的试着查找 cheerio 和 jQuery 选择器,但我找不到任何可以帮助我的东西。

这是我的代码:

const cheerio = require('cheerio');
const request = require('request');


request({
    method: 'GET',
    url: `http://exmaple.com/`
}, (err, res, body) => {

    if (err) return console.error(err);

    let $ = cheerio.load(body);

   

    let TonerLevel = 'empty';

    TonerLevel = $('#TonerSupplies > div > div > div.contentBody > div > div > div > span');

    console.log(TonerLevel.text());
});


感谢您提供有关如何获得“72”的帮助和建议

另外,如果我也可以获得属性 'title',我将获得碳粉级别,但是当我使用选择器时 returns 未定义 TonerLevel.attr('title')

它适用于其他一些元素。

好的,所以我自己发现了问题。碳粉水平是从脚本加载的;因此,我使用 puppeteer 等待网站加载并获得该号码。

const page = await browser.newPage();
await page.goto(`http://ip-address`);
await page.waitForSelector('#TonerSupplies > div > div > div.contentBody > div > div > div > span');