Очистить динамический сайт - PullRequest
12 голосов
/ 16 октября 2008

Каков наилучший способ очистки динамического веб-сайта, на котором большая часть контента создается с помощью запросов AJAX? У меня есть опыт работы с Mechanize, BeautifulSoup и python, но я готов к чему-то новому.

- Edit-- Для более подробной информации: я пытаюсь очистить основную базу данных CNN . Там много информации, но, похоже, нет API.

Ответы [ 9 ]

7 голосов
/ 19 октября 2008

Лучшее решение, которое я нашел, - использовать Firebug для мониторинга запросов XmlHttpRequest, а затем использовать скрипт для их повторной отправки.

7 голосов
/ 16 октября 2008

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

Это решение с большим весом, но я видел людей, которые делают это с помощью сценариев greasemonkey - позволяют Firefox отрисовывать все и запускать javascript, а затем очищать элементы. При необходимости вы даже можете инициировать действия пользователя на странице.

-Adam

4 голосов
/ 16 октября 2008

Selenium IDE, инструмент для тестирования, я использовал для скриншотов. Есть несколько вещей, с которыми он плохо справляется (Javascript window.alert () и всплывающие окна в целом), но он работает на странице, фактически вызывая события щелчка и вводя текстовые поля. Поскольку часть IDE работает в Firefox, вам не нужно полностью управлять сессиями и т. Д., Поскольку Firefox позаботится об этом. IDE записывает и воспроизводит тесты обратно.

Он также экспортирует код на C #, PHP, Java и т. Д. Для создания скомпилированных тестов / скребков, которые выполняются на сервере Selenium. Я сделал это для более чем нескольких моих сценариев Selenium, что значительно упрощает хранение таких данных в базе данных.

Скрипты довольно просты для написания и изменения, и состоят из таких вещей, как («clickAndWait», «submitButton»). Стоит посмотреть, учитывая то, что вы описываете.

3 голосов
/ 16 октября 2008

Совет Адама Дэвиса тверд.

Я бы дополнительно предложил вам попытаться «перепроектировать» то, что делает JavaScript, и вместо того, чтобы очищать страницу, вы отправляете HTTP-запросы, которые выдает JavaScript, и интерпретируете результаты самостоятельно (скорее всего Формат JSON, приятно и легко разбирать). Эта стратегия может быть любой, от тривиальной до полного кошмара, в зависимости от сложности JavaScript.

Наилучшей возможностью, конечно, было бы убедить тех, кто поддерживает сайт, реализовать API, дружественный к разработчику. Все классные дети делают это в эти дни : - (

2 голосов
/ 21 октября 2008

Существует некоторая кривая обучения, но такие инструменты, как Pamie (Python) или Watir (Ruby) позволят вам войти в веб-браузер IE и получить доступ к элементам. Это оказывается проще, чем Mechanize и другие инструменты уровня HTTP, поскольку вам не нужно эмулировать браузер, вы просто запрашиваете у браузера элементы html. И это будет намного проще, чем реверс-инжиниринг вызовов Javascript / Ajax. При необходимости вы также можете использовать такие инструменты, как красивый суп в сочетании с Пами.

1 голос
/ 13 марта 2009

Я обнаружил, что у элемента управления IE Webbrowser есть все виды причуд и обходных путей, которые могут оправдать использование какого-либо высококачественного программного обеспечения для устранения всех этих несоответствий, распределенных между API-интерфейсами shvwdoc.dll и mshtml, и обеспечивают основу.

1 голос
/ 19 октября 2008

Вероятно, самый простой способ - использовать браузерный элемент управления IE в C # (или любом другом языке). У вас есть доступ ко всем материалам внутри браузера из коробки + вам не нужно заботиться о файлах cookie, SSL и т. Д.

0 голосов
/ 25 января 2012

Первый вопрос, который у меня возникает: можете ли вы подтвердить, что сайт абсолютно не работает без Javascript? Вы удивитесь, сколько сайтов еще можно использовать, если отключить JavaScript. Вы, вероятно, будете направлены на несколько иной набор URL-адресов.

0 голосов
/ 16 октября 2008

Кажется, это довольно распространенная проблема. Интересно, почему кто-то еще не разработал программный браузер? Я предполагаю, что Firefox можно вызвать из командной строки с URL-адресом в качестве аргумента, и он загрузит страницу, запустит все начальные события загрузки JS страницы и сохранит полученный файл.

Я имею в виду Firefox, и другие браузеры уже делают это, почему мы не можем просто удалить интерфейс?

...