Как программно захватить веб-страницу с принудительными обновлениями

Мне нужно сделать снимок веб-сайта, и я ищу для этого подходящую библиотеку или программу. Веб-сайт использует Java Script и отправляет обновления на страницу, и мне нужно фиксировать их, а также саму страницу. Я использую curl для захвата самой страницы, но я не знаю, как фиксировать обновления. Если бы у меня был выбор, я бы использовал C++.

С Уважением

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
1 984
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Взгляните на ПаукОбезьяна.

На самом деле я не использовал его в гневе, поэтому не уверен, что он сделает то, что вы хотите. Я столкнулся с тем, что он использовался опционально с фреймворком Scrapy для веб-сканирования и очистки экрана, написанным на Python.

В качестве альтернативы, можете ли вы перепроектировать, как выполняются push-обновления JavaScript, и получить к ним прямой доступ. Похоже, вам нужно сохранить эти обновления и / или применить их к базовой HTML-странице.

Проблема в том, что ваши веб-страницы обновляются, потому что на странице выполняется код сценария. Использование curl не поможет вам в этом ..

Не уверен в ваших точных потребностях ... но вы могли бы написать букмарклет javascript-инжектора, который добавляет кнопку на любую веб-страницу и позволяет вам вручную захватывать DOM или body html в любое время ... Вот сколько приложений для маркировки клипов работает .

Если вам нужно что-то, что автоматически фиксирует обновления по мере их появления - например, фильм ... тогда вам понадобится что-то более сложное ...

Если вы все еще хотите использовать C++ и curl, попробуйте выяснить, что делает javascript на странице - я предполагаю, что он просто использует таймер для отправки запроса AJAX и обновления страницы (хотя это может быть сложнее). Используйте такой инструмент, как firefox с firebug (вам нужен «сетевой» шпион), чтобы узнать, что это за запрос - вы получите:

  • URL запроса
  • параметры
  • возвращаемое содержимое (это может быть html, текст, xml или json)

Если повезет, у вас будет достаточно, чтобы имитировать поведение в C++ с помощью curl. Если вы не можете ничего сделать из собранных данных, вам придется просмотреть javascript и попытаться выяснить, что он делает (но в большинстве случаев обновления страниц действительно просты).

Самый простой способ сделать это - сделать это в браузере, например. в качестве плагина firefox (написанного на javascript) - если это необходимо для чего-либо, кроме домашнего проекта, это может быть немного «неэлегантно», но это должно быть действительно легко:

  • контролировать дерево DOM на предмет обновлений (html DOM уровня 2 имеет все виды событий «мутации», но я никогда не использовал их, поэтому я мало знаю о них, или если они «работают» / поддерживаются - см. События мутации DOM). Есть даже вероятность, что такие вещи будут работать в грязная обезьяна, что означает, что вам не нужно будет создавать полный плагин firefox - например. Пост-обработка страницы после ее рендеринга должен помочь вам начать работу (вы хотите отслеживать не «загрузку», а что-то вроде «DOMSubtreeModified»). Если события мутации не работают, вы всегда можете использовать таймер и сравнить содержимое HTML.
  • или сделайте так, как это делает firebug, и отслеживайте сетевые запросы и делайте что-то с результатами
Ответ принят как подходящий

Установите Firefox и Грязная обезьяна. Попросите сценарий GM добавить события DOM, где это необходимо, для отслеживания изменений. Затем вы можете использовать XMLHttpRequest для отправки информации на сервер или записать их в локальные файлы с помощью XPCOM файл IO операции.

Благодаря этому вы можете делать то, что хотите, в десятке строк и практически без обратного проектирования, тогда как то, что другие посоветовали (очистка экрана), потребует тысячи строк кода для сайта IMO с тяжелым JavaScript.

Дополнение: это / не / работа для C++. И если вы все равно сделаете это на C++, вам придется реконструировать JS, так что вы можете просто выучить достаточно JS для использования GreaseMonkey в первую очередь.

Если вы ищете парсинг статической веб-страницы, BeautifulSoup (Python) - один из лучших и самых простых.

Если вы хотите очистить некоторые отрисованные javascript тикеры или что-то в этом роде, это невозможно сделать, пока страница не будет отрисована, следовательно, это невозможно с одним BeautifulSoup. вам придется использовать безголовый браузер, такой как Лом - Similie (использует XULRunner), который отображает содержимое javascript в безголовом браузере, и вывод этого визуализированного содержимого можно использовать в качестве входных данных для парсера BeautifulSoup.

Другие вопросы по теме