Как извлечь данные из Java-апплета (внутри браузера) - PullRequest
3 голосов
/ 05 августа 2011

Ну, ладно, поехали ...

У нас есть Java-апплет, работающий в обычном браузере (ff4 + или ie5 +).

У меня нет доступа к коду / сервлету Java. Ни даже на сервер.

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

Таким образом, доступны следующие технологии: C, VB, .NET (в основном, объект webbrowser), PHP (cUrl avaible), JavaScript, сниффинг связи между браузером и сервером с использованием Fiddler.

Нам это действительно нужно. Но если это невозможно, нам, возможно, придется это знать. Данные принадлежат моей компании, поэтому авторские права не применяются.

Также я открыт для нетрадиционного решения, такого как сохранение HTML в виде изображения, а затем извлечение данных с помощью некоторого программного обеспечения OCR ...

Что ж, мы будем благодарны за любые предложения или указания.

Thx

Пауло Буэно.

Ответы [ 5 ]

4 голосов
/ 12 августа 2011

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

  1. Извлечение класса апплета или jar из моего кэша (любой, кто обращается к странице / апплету, может сделать это).
  2. Декомпилировать код в исходный код Java(Используя jad или другой предпочтительный инструмент)
  3. Просмотрите процесс, с которым апплет связывается с сервисом
  4. Напишите приложение для отправки моих данных в сервис, к которому апплет подключается, и обработайте любые ответытак же, как и апплет.
0 голосов
/ 15 августа 2011

Если вам необходимо получить данные, взаимодействуя с Java-апплетом, а не реинжинирингом этого, проверьте FEST (Приспособления для простого тестирования программного обеспечения) . FEST предназначен для тестирования графических интерфейсов Java Swing путем имитации взаимодействия с пользователем, но вы также можете легко использовать его для автоматизации вашего апплета.

Для начала ознакомьтесь со страницей документации по тестированию апплетов .

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

У меня нет доступа к коду / сервлету Java. Ни даже к сервер.

Эмм ... Это довольно необычная ситуация. Если у вас есть апплет, конечно, вы должны иметь доступ к его файлам src для изменения :)

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

В любом случае, чтобы «эмулировать» пользователя, вы можете использовать объект Robot , но при этом вам потребуется изменить код апплета, чтобы он поддерживал некоторые дополнительные функции ... Как я помню, JS и т. Д. не может управлять Java-апплетом из внешних команд, если только апплет не поддерживает JS-функции для взаимодействия с веб-страницей ... Но все же вы говорите, что у нет доступа к апплету src, поэтому нет никакой информации поддержка апплета netscape.javascript или нет, и как он его поддерживает, так что неясно ... Поэтому я должен спросить, есть ли у вас какие-либо документы по этому апплету?

Объединение вокруг текста вопроса и возвращение к самому заголовку вопроса, который говорит

«Как извлечь данные из апплета Java (внутри браузера)»

Можно предположить, что Для извлечения данных из Java-апплета вы можете использовать netscape lib, который поддерживает взаимодействие Java-апплета и JS пример , документы . Это самый оптимальный способ в этом случае

Удачи

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

Не может быть слишком сложно декомпилировать / изменять / компилировать снова апплет, если он не запутан. Я использую JAD. https://stackoverflow.com/questions/31353/is-jad-the-best-java-decompiler

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

Вы можете запустить любой апплет без браузера, используя «appletviewer», который поставляется в JRE. Таким образом, можно, но не практично, читать и отправлять ложные данные с помощью http://code.google.com/p/windowlicker/ для управления графическим интерфейсом SWING.

Но в обычной среде браузера с доступом к коду вы бы предпочли сделать следующее:

используя атрибуты / элементы «scriptable» и «mayscript» в теге вашего объекта. Стандартные JRE браузера включают в себя «plugin.jar», который содержит необходимую функцию для выполнения этой работы. Этот интерфейс позволяет коду Java-апплета взаимодействовать наоборот с Javascript, из которого вы можете делать все, что захотите (например, ajax-запрос)

эта тема довольно сложная, поэтому посмотрите, что нам говорит гугл:

http://www.htmlcodetutorial.com/applets/_APPLET_MAYSCRIPT.html http://www.raditha.com/java/javascript.php

Использовать этот интерфейс очень сложно, поэтому я предлагаю реализовать HTTP-запросы в вашем апплете, чтобы сообщить PHP-серверу все, что вы хотите ему сообщить.

С уважением, Michael

...