Я отправил этот вопрос в список рассылки PhantomJS неделю назад, но не получил ответа. Надеюсь на лучшую удачу здесь...
Я пытаюсь использовать PhantomJS для очистки информации с YouTube, но не смог заставить ее работать.
Рассмотрим видео YouTube, встроенное в веб-страницу с помощью элемента iframe. Если вы загружаете URL-адрес, на который ссылается атрибут src, непосредственно в браузер, вы получаете полностраничную версию видео, где видео инкапсулируется в элемент embed. Элемент embed отсутствует в исходном содержимом страницы; скорее, некоторые теги script на странице заставляют оценивать Javascript, который в конечном итоге добавляет элемент embed в DOM. Я хочу иметь доступ к этому встроенному элементу, когда он появляется, но он никогда не появляется, когда я загружаю страницу в PhantomJS.
Вот код, который я использую:
var page = require("webpage").create();
page.settings.userAgent = "Mozilla/5.0 (X11; rv:24.0) Gecko/20130909 Firefox/24.0";
page.open("https://www.youtube.com/embed/dQw4w9WgXcQ", function (status) {
if (status !== "success") {
console.log("Failed to load page");
phantom.exit();
} else {
setTimeout(function () {
var size = page.evaluate(function () {
return document.getElementsByTagName("EMBED").length;
});
console.log(size);
phantom.exit();
}, 15000);
}
});
Я когда-либо видел "0", напечатанный на консоли, независимо от того, как долго я устанавливаю таймаут. Если я ищу элементы "DIV", я получаю "3", и если я ищу элементы "SCRIPT", я получаю "5", поэтому код кажется звуковым. Я просто никогда не нахожу теги "EMBED", хотя, если я загружаю URL-адрес выше в своем браузере, я нахожу его вскоре после загрузки страницы.
Кто-нибудь может понять, что может быть проблемой? Заранее благодарим за любую помощь.