Моя цель - подключиться к странице OWA (Microsoft Office Outlook Web Access - в основном почтовый клиент) и войти в систему, затем прочитать новую загруженную страницу и найти количество входящих сообщений.
Для входа в систему,Мне нужно заполнить поля username и password и вызвать определенную функцию javascript, для которой я знаю имя и заголовок.
Как мне:
- Получить DOM для страницы?
- Обновить DOM, чтобы заполнить поля ввода текста?
- Вызвать эту функцию Javascript?
- Получить новый 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 так, чтобы он был достаточно мягким и "простил" требование свободного места.