NodeJS 我正在尝试获取一个h4元素文本,它是使用puppeteer的divs的子元素

cwtwac6a  于 2022-12-12  发布在  Node.js
关注(0)|答案(1)|浏览(133)

我正在尝试这个代码来提取一个h4,它是7个父div的孩子。比如父div,祖div。这个h4是声明的
它不工作,因为没有收到h4。

const puppeteer = require('puppeteer')
async function run() {

    const browser = await puppeteer.launch({
        headless: false,
        ignoreHTTPSErrors: true,
    })

    var x = 1101;
    while (x !== 0) {
        const page = await browser.newPage();
        await page.setRequestInterception(true);

        page.on('request', (req) => {
            if (req.resourceType() == 'image' || req.resourceType() == 'font') {
                req.abort();
            }
            else {
                req.continue();
            }
        });
        page.setDefaultTimeout(0);
        await page.goto(`https://play.projectnebula.com/planet/${x}`);
        await page.waitForSelector('h4');
        const elements = await page.$$("h4");

        let text = await (await elements[elements.length - 2].getProperty("innerText")).jsonValue()
        text = text.toLowerCase().trim();
        if (text == 'claimed' || text == 'on sale') {
            console.log(text, x)
            x += 1;
            await page.close();
        }
        else {
            console.log(x, text)
            x = 0
        }
    }
}
run();

我试图找到一个无人认领的行星,无人认领和已认领的都在h4。在1或2个网址工作后。代码停止,即使行星被认领,因为claimed的h4没有被提取。在这些页面中有大约13个h4。对于第一个或第二个网址,所有13个被提取,但对于下一个网址,只有11个被fethced

sqxo8psd

sqxo8psd1#

await waitforselector()之后使用await page.waitForNetworkIdle();

while (x !== 0) {
  const page = await browser.newPage();
  // we need to enable interception feature
  await page.setRequestInterception(true);

  page.on('request', (req) => {
      if (req.resourceType() == 'image' || req.resourceType() == 'font') {
          req.abort();
      }
      else {
          req.continue();
      }
  });
  page.setDefaultTimeout(0);
  await page.goto(`https://play.projectnebula.com/planet/${x}`);
  await page.waitForSelector('h4');
  // await page.waitForSelector('h4').then(async() => {
  await page.waitForNetworkIdle();
  const elements = await page.$$("h4");
  let text = await (await elements[elements.length - 2].getProperty("innerText")).jsonValue()
  text = text.toLowerCase().trim();
  if (text == 'claimed' || text == 'on auction' || text == 'on sale') {
      console.log(text, x)
      x += 1;
      await page.close();
  }
  else {
      console.log(x, text)
      x = 0
  }
}

相关问题