Я использовал HtmlUnit для удаленного входа на школьный портал. Как я понимаю, у школьных порталов всегда возникают проблемы со входом в систему. Я знаю, что есть другие вопросы по этой теме, но если вы не возражаете, пожалуйста, посмотрите мой конкретный пример.
Используя мой код, я хочу заполнить форму входа на главной странице, чтобы получить доступ к моему личному профилю. Тем не менее, htmlUnit выдает мне ошибку во время выполнения и возвращает обратно на главную страницу.
Я приложил код, который я пытаюсь выполнить, и ошибки, которые я получаю. Кроме того, я приложил вывод, который я получаю (это не то, что я хочу). (Вот какую ссылку я наконец пытаюсь получить: https://mistar.oakland.k12.mi.us/novi/StudentPortal/Home/PortalMainPage)
public class MistarLogin {
public static void main(String[] args) throws Exception {
//java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(java.util.logging.Level.OFF);
//java.util.logging.Logger.getLogger("org.apache.http").setLevel(java.util.logging.Level.OFF);
final WebClient webClient = new WebClient(BrowserVersion.CHROME);
int javaScriptLeftNum = webClient.waitForBackgroundJavaScript(3000);
// Get the first page
HtmlPage firstPage = (HtmlPage) webClient.getPage("https://mistar.oakland.k12.mi.us/novi/StudentPortal");
System.out.println(firstPage.asText());
System.out.println("\n\n\n\n\n\n\n-------------------------------------------------------------------------------\n\n\n\n\n\n");
// Get the form that we are dealing with and within that form,
// find the submit button and the field that we want to change.
HtmlForm form = firstPage.getFormByName("loginform");
// Enter login and passwd
//form.getInputByName("districtid").setValueAttribute("");
form.getInputByName("Pin").setValueAttribute("email");
form.getInputByName("Password").setValueAttribute("password");
// Click "Sign In" button/link
HtmlInput loginButton = form.getInputByValue("Log In");
HtmlPage testPage = (HtmlPage) loginButton.click();
// I added the cookie section but this returns a null pointer exception
Set<Cookie> cookie = webClient.getCookieManager().getCookies();
if(cookie != null){
Iterator<Cookie> i = cookie.iterator();
while (i.hasNext()) {
webClient.getCookieManager().addCookie(i.next());
}
}
// final HtmlPage secondPage = loginButton.click();
Затем просто распечатайте firstPage, testPage (вывод такой же)
Вот что я получаю:
Student Portal
District Website
StudentPortal Войти
Имя пользователя:
Пароль:
Войти
0
школьный округ Нови
1 * * тысяча двадцать-один
Загрузка информации ...
Загрузка информации ...
Это ошибка, которую я получаю (самая существенная):
com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter runtimeError
SEVERE: runtimeError: message = [Указан недопустимый или недопустимый селектор (селектор: ': input [form = "loginform"]' ошибка: недопустимый селектор: *: input [form = "loginform"]).] SourceName = [https://mistar.oakland.k12.mi.us/novi/StudentPortal/Scripts/jquery-1.11.2.min.js?m=20150316043710] line = [2] lineSource = [null] lineOffset = [0]
P.S. Извините за форматирование, я не знаком с правилами формирования пакетов Stackoverflow.
P.P.S. Если есть какие-либо вопросы, пожалуйста, задавайте. Я буду смотреть на этот вопрос постоянно. Спасибо еще раз.