puppeteer 在尝试抓取 img src 时返回 undefined

时间:2021-04-09 22:55:29

标签: javascript puppeteer

我试图从 youtube 上用它的 XPath 刮取缩略图,但我得到了 src 的 undefined。我无法弄清楚是什么导致了这种情况?我已经尝试使用 XPath 和完整 XPath 但这没有帮助。任何帮助表示赞赏。提前致谢。

const puppeteer = require('puppeteer');

async function scrapeChannel1(url) {

  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(url, {
    timeout: 0
  });

  const [el2] = await page.$x('//*[@id="dismissible"]/ytd-thumbnail');
  const src1 = await el2.getProperty('src');
  const thumbnailURL1 = await src1.jsonValue();

  browser.close();
  console.log({
    thumbnailURL1
  })
  return {
    thumbnailURL1
  }
}

scrapeChannel1('https://www.youtube.com/')

1 个答案:

答案 0 :(得分:1)

您要查找的 <img> 位于 DOM 中更深的位置:'//*[@id="dismissible"]/ytd-thumbnail/a/yt-img-shadow/img'(因此您应该在 XPath 表达式的末尾添加:/a/yt-img-shadow/img)。
请注意,您在 puppeteer 中拥有比 .getProperty('src') 更强大的工具来检索 DOM 元素属性。

例如page.$eval

const selector = 'ytd-thumbnail > a > yt-img-shadow > #img'
const imageSrc = await page.$eval(selector, el => el.src)

// returns: https://i.ytimg.com/vi/{youtube_id}/hqdefault.jpg...

或者,如果您希望所有图像都使用 page.$$eval

const imageSrcs = await page.$$eval(selector, elems => elems.map(el => el.src))
相关问题