Как получить доступ к iframe #document с помощью cheeriojs? - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь очистить страницу аниме-видео [jkanime], но у меня проблемы с форматами видео mp4, поскольку они находятся в документе iframe #.

Я пытался сделать запрос, используяЧерт возьми, но мне удалось получить только два src из плагинов Facebook.Это как если бы я не распознал ифрам, где находятся mp4.

В инструменте разработчика Chrome я поставил следующее: $ ('# jkvideo_html5_api source')

ИSRC MP4 показывает мне.Но когда я использую тот же запрос с cheerio, ничего не происходит.

Я несколько недель пытался получить mp4, но не смог.Любая помощь будет более чем приветствоваться.

Изображение

раздел исходного кода devtool

  const getAnimeVideo = async (id: string, chapter: number) => {
    const res = await fetch(`${url}${id}/${chapter}/`);
    const body = await res.text();
    const $ = cheerio.load(body);
    const arr = [];
    $('iframe').each((index, element) => {
      const $element = $(element);
      const x = $element.attr('src');
      console.log(x);
      arr.push(x);
    });
    return arr;
}

ВыводПолучено

{
  "videos": [
    "https://www.facebook.com/plugins/like.php?href=https%3A%2F%2Fwww.facebook.com%2Fjkanimetv%2F&width=132&layout=box_count&action=like&size=large&show_faces=false&share=false&height=21&appId=149291901844100",
    "https://www.facebook.com/plugins/like.php?href=https://jkanime.net/tokyo-ghoul/1/&width=76&layout=box_count&action=like&size=small&show_faces=false&share=false&height=65&appId=149291901844100"
  ]
}

Вывод, который я хочу получить

{
  "videos": [
    "https://storage.googleapis.com/markesito.appspot.com/blakkkk-88.mp4"
   ]
}

Обновление: 22:52

Используя кукловода, я нашел способ доступа к iframe с помощью класса player_conte.Он показывает мне следующий вывод в терминале:

_navigationURL

Теперь .. я не знаю, как получить ссылку от _navigationURL

Чтобы иметь возможность использовать его с cheerio и ссылаться на источник видео.

Код обновлен

const getAnimeVideo = async (id: string, chapter: number) => {
  const BASE_URL = `${url}${id}/${chapter}/`  // => https://jkanime.net/tokyo-ghoul/1/
  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();
  const $ = cheerio.load(`${frame}`);
  console.log(frame)
}

1 Ответ

0 голосов
/ 20 июня 2019

Проблема решена с помощью кукловода

const getAnimeVideo = async (id: string, chapter: number) => {
  const BASE_URL = `${url}${id}/${chapter}/`  // => https://jkanime.net/tokyo-ghoul/1/
  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();
  const video = await frame.$eval('#jkvideo_html5_api', el =>
  Array.from(el.getElementsByTagName('source')).map(e => e.getAttribute("src")));
  return video;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...