Как парсить динамические страницы PHP
Задание: Спарсить динамически подгружаемый блок на YouTube (блок лицензии под описанием с id #collapsible).
Начальный DOM страницы состоит из закодированных скриптов, поэтому PHP не видит желаемого элемента.
Лишь после полной отработки JS загружаются все остальные данные.

Уточнение: YouTube API и oEmbed НЕ подходят для этих нужд
Подскажите как решить это посредством PHP (решит ли вопрос phpQuery) или другие способы решения.
Опыт: Подключил библиотеку «Simple Html Dom Php», однако она работает только со статическими страницами.
Код: Мое решение на котором остановился
<?php
require 'simple_html_dom.php'; //подключаем библиотеку
$link = 'https://www.youtube.com/watch?v=kdmBTTAFlk0';
$html = file_get_html( $link ); // получаем страницу
$load = file_get_contents( $link );
$html= str_get_html( $load );
echo $element = $html->find('#collapsible', 0);
?>
Ответы (1 шт):
как решить это посредством PHP
Достаточно сложно, т.к. PHP не слишком предназначен для этого. Один из вариантов - V8js модуль.
другие способы решения
Взять Node.js и Puppeteer:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.youtube.com/watch?v=Hc16Y9fiCvQ');
await page.waitForSelector('paper-button#more');
await page.click('paper-button#more');
await page.waitForSelector('#collapsible ytd-metadata-row-header-renderer');
let desc = await page.evaluate(() => {
let innerText = [];
document.querySelectorAll('ytd-metadata-row-renderer.ytd-metadata-row-container-renderer')
.forEach(node => innerText.push(node.innerText));
return Promise.resolve(innerText);
})
console.log(desc);
await browser.close();
})();
Есть и для Python, но лично не пробовал.