Вызов Javascript на веб-странице из Java - PullRequest
3 голосов
/ 19 июля 2010

Моя цель - подключиться к странице OWA (Microsoft Office Outlook Web Access - в основном почтовый клиент) и войти в систему, затем прочитать новую загруженную страницу и найти количество входящих сообщений.

Для входа в систему,Мне нужно заполнить поля username и password и вызвать определенную функцию javascript, для которой я знаю имя и заголовок.

Как мне:

  1. Получить DOM для страницы?
  2. Обновить DOM, чтобы заполнить поля ввода текста?
  3. Вызвать эту функцию Javascript?
  4. Получить новый URL для страницы, на которую я перенаправлен?

Пока я могу подключиться к веб-странице и загрузить ее источник страницы, используя следующий код Java:

                // open the connection to the welcome page
                callback.status("Opening connection...");
                URLConnection connection = null;
                try
                {
                    connection = url.openConnection();
                }
                catch(IOException ex)
                {
                    throw new Exception("I/O Problem while attempting URL connection");
                }

                connection.setDoInput(true);

                // open input stream to read website
                callback.status("Opening data stream...");
                InputStream input = null;
                try
                {
                    input = connection.getInputStream();
                }
                catch(IOException ex)
                {
                    throw new Exception("I/O Problem while opening data stream");
                }

                // read website contents
                callback.status("Reading site...");

                String content = "";
                byte[] buffer = new byte[100];
                int totalBytesRead = 0;
                int bytesRead = 0;
                try
                {
                    while((bytesRead = input.read(buffer)) != -1)
                    {
                        String newContent = new String(buffer, 0, bytesRead);
                        content += newContent;
                    }
                }
                catch(IOException ex)
                {
                    throw new Exception("I/O Problem while reading website");
                }

                System.out.println(content);

В результате весь источник страницы выводится на консоль - отлично,Я также попытался проанализировать страницу, чтобы получить объект DOM, после чего я смогу найти поля своего имени пользователя и пароля:

                XMLParserConfiguration config = new XML11DTDConfiguration();
                DOMParser parser = new DOMParser(config);
                InputSource inputSource = new InputSource(input);
                inputSource.setByteStream(input);
                try
                {
                    parser.parse(inputSource);
                }
                catch(SAXParseException ex)
                {

                }
                Document document = parser.getDocument();
                visitNode(document, 0);

Но я получаю исключение SAXParseException:: 6: 62: Требуются пробелымежду publicId и systemId.

Похоже, виновата эта строка:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

Так что мне может понадобиться изменить конфигурацию этого DOMParser так, чтобы он был достаточно мягким и "простил" требование свободного места.

1 Ответ

11 голосов
/ 19 июля 2010

То есть вы хотите вести себя как веб-браузер без графического интерфейса?Используйте HtmlUnit , это именно то, с чем он себя рекламирует.

HtmlUnit - это «браузер без графического интерфейса для программ Java».Он моделирует документы HTML и предоставляет API, который позволяет вам вызывать страницы, заполнять формы, щелкать ссылки и т. Д., Как вы делаете это в «обычном» браузере.

Он имеет довольно хорошую поддержку JavaScript (который постоянно совершенствуется) и может работать даже с довольно сложными библиотеками AJAX, имитируя либо Firefox, либо Internet Explorer, в зависимости от конфигурации, которую вы хотите использовать.

Обычно используется для тестирования или для получения информации извеб-сайты.

См. Также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...