Эмуляция веб-браузера, чтобы обернуть функциональность нескольких похожих веб-сайтов - PullRequest
1 голос
/ 01 августа 2011

Мне интересно эмулировать функциональность веб-браузера на C ++, чтобы я мог создать оболочку для нескольких веб-сайтов. В настоящее время самые большие проблемы с этими сайтами в том, что они интенсивно используют JavaScript, который взаимодействует с HTML DOM. Таким образом, простое решение использования curl для загрузки страницы и что-то вроде RapidXML для анализа ее содержимого отсутствует.

Далее, я подумал об использовании чего-то вроде v8 с curl, и это решает проблему интерпретации JavaScript на странице. Однако это не решает проблему соединения методов HTML DOM с JavaScript; другими словами, document.getElementById() потерпит неудачу в v8.

Далее я рассмотрел WebKit , который, похоже, идеально подходит для эмуляции веб-браузера - в конце концов, Chromium и Safari оба используют его в своих веб-браузерах. Однако, это немного слишком полно. Мне не нужны все аспекты рендеринга, которые он включает.

Итак, я бы искал способ:

  1. Установить SSL-соединение с веб-сайтом
  2. Интерпретация JavaScript на этом веб-сайте в связи с HTML DOM
  3. Установить значение имени пользователя / пароля <input> поля с моим именем пользователя и паролем
  4. Имитируйте нажатие кнопки «Отправить», вызывая функцию formSubmit() из <input type="button" onClick="formSubmit()">
  5. Обработка действия формы HTTP POST и последующих перенаправлений HTTP 301 и JavaScript (выполняется с помощью window.location)
  6. Повторите 2-5 при необходимости

Кроме того, что я уже рассмотрел, какие еще есть варианты? В идеале я хотел бы, чтобы это было очень легко, без необходимости ссылки на многие библиотеки.

В первую очередь я занимаюсь разработкой для Windows 7 64-битной системы.

1 Ответ

0 голосов
/ 01 августа 2011

Ну, это звучит слишком похоже на программу грубой силы. Не обращая на это внимания, и поскольку вам, похоже, не нужно отображать какой-либо веб-сайт, я думаю, что вы должны просто извлечь файл с помощью cURL или чего-то еще, затем проанализировать его, проверить форму с помощью регулярного выражения, получить действие формы, а затем выполнить запрос с использованием метода, взятого из тега <form> и любого ввода, который вы хотите.

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

Это самое легкое решение, которое я могу предложить прямо сейчас.

...