木偶无法使用获取属性

发布时间:2020-07-06 01:22

无法读取未定义的属性“ getProperty”是我得到的错误。

const puppeteer = require('puppeteer');

async function scrapeUdemy(url) {
    try {
        const browser = await puppeteer.launch({headless: false, slowmo: 250});
        const page = await browser.newPage()
        await page.goto(url)

        const [el] = await page.$x('//*[@id="udemy"]/div[1]/div[4]/div/div/div[2]/div/div/div[1]/a/div[1]/div[1]');
        const txt = await el.getProperty('textContent');
        const rawTxt = await src.jsonValue();

        console.log({srcTxt});

        browser.close();
    }
    catch(err) {
        console.log(err.message);
    }
}

scrapeUdemy('https://www.udemy.com/user/eren-cem-salta/')

我尝试使用其他版本,但不起作用。它也不能与catch块一起使用。

回答1

您要获取的元素在页面启动后 中已加载AJAX,您必须等待它出现在DOM中:

await page.waitForSelector('[data-purpose="course-card-container"] div.udlite-heading-sm');

为什么不使用相同的选择器来获得所有卡:

const titles = await page.evaluate(() => {
  const nodes = document.querySelectorAll(
    '[data-purpose="course-card-container"] div.udlite-heading-sm'
  );
  return [...nodes].map((node) => node.textContent);
})