Как исправить, ошибка: невозможно прочитать свойство 'contentFrame' с нулевым значением, используя puppeteer - PullRequest
1 голос
/ 24 июня 2019

Я испытываю ошибку, когда запрашиваю API, который внедряю.После того, как я использовал одну из конечных точек, она показывает мне ошибку, следующую за ошибкой, которую можно увидеть ниже.

Невозможно контролировать эту ошибку .?

Сообщение об ошибке:

TypeError: Cannot read property 'contentFrame' of null
    at Object.getAnimeVideo (C:\Users\c\Desktop\ryuanime\src\api\scraper.ts:89:37)
    at process._tickCallback (internal/process/next_tick.js:68:7)

Код:

const getAnimeVideo = async (id: string, chapter: number) => {
  const BASE_URL = `${url}${id}/${chapter}/`;
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(BASE_URL);
  const elementHandle = await page.$('.player_conte');
  const frame = await elementHandle.contentFrame(); //line 89 error
  const video = await frame.$eval('#jkvideo_html5_api', el =>
    Array.from(el.getElementsByTagName('source')).map(e => e.getAttribute("src")));
  await browser.close();
  return video;
}

1 Ответ

1 голос
/ 24 июня 2019

Проблема

elementHandle - это null.Вот почему вы получаете сообщение об ошибке, что на null нет функции contentFrame.page.$ равно null, когда селектор не может быть найден.

Решение

Чтобы решить проблему, вы можете сделать две вещи:

  • Является ли селектор на самом деле искателем, который вы ищете?Может быть, это внутри фрейма, а не на самой странице или, возможно, с орфографической ошибкой?
  • Может быть, элемент отсутствует в то время, когда работает ваш скрипт?Может быть, страница асинхронно загружает больше данных и меняет DOM?В этом случае вы можете использовать page.waitForSelector, например, чтобы дождаться появления элемента:

    const elementHandle = await page.waitForSelector('.player_conte');
    
...