HTML-модуль ВХОД - PullRequest
       11

HTML-модуль ВХОД

0 голосов
/ 10 мая 2019

В основном я пытаюсь использовать модуль HTML для входа в систему.

Однако для входа в систему в качестве формы для ввода имени пользователя следует нажать кнопку «Далее», после чего форма активируется, и необходимо ввести пароль. Моя проблема возникает, когда я button.click() страница получает первую форму, а не второй, где должен быть введен пароль

public void search() throws Exception {
    WebClient wb = new WebClient();

    HtmlPage p = wb.getPage(
            "https://account.booking.com/sign-in?op_token=EgVvYXV0aCJHChQ2Wjcyb0hPZDM2Tm43emszcGlyaBIJYXV0aG9yaXplGhpodHRwczovL2FkbWluLmJvb2tpbmcuY29tLyoCe31CBGNvZGUqDDCgqZHe5rMjOgBCAA");
    // HtmlPage p = (HtmlPage) wb.getPage(this.bUrl);

    List<HtmlForm> form = p.getForms();

    form.get(0).getInputByName("loginname").setValueAttribute("1234567");
    HtmlForm fm = form.get(0);
    System.out.println(form.get(0).getInputByName("loginname").getValueAttribute().toString());

    List<Object> button = fm.getByXPath("//button[@type='submit']");

    HtmlButton bt = (HtmlButton) button.get(0);

    System.out.println(p.asText() + "\n+_________________");
    bt.click();
    System.out.println(p.asText());

}

Вывод будет одинаковым до и после bt.click()

1234567
Booking.com Account
This website uses cookies. Click here for more information.
Close
Sign In to Manage Your Property
Username
1234567
Next
Having trouble signing in?
Questions about your property or the Extranet? Visit the Partner Help Center or ask another partner on the Partner Forum.
Add your property to Booking.com
Create a partner account to list and manage your property.
Register
By clicking "Allow access" you authorize Extranet to use your Booking.com account info according to Extranet Terms of service.
+_________________
Booking.com Account
This website uses cookies. Click here for more information.
Close
Sign In to Manage Your Property
Username
Enter your username
Next
Having trouble signing in?
Questions about your property or the Extranet? Visit the Partner Help Center or ask another partner on the Partner Forum.
Add your property to Booking.com
Create a partner account to list and manage your property.
Register
By clicking "Allow access" you authorize Extranet to use your Booking.com account info according to Extranet Terms of service.

1 Ответ

1 голос
/ 10 мая 2019

Извините, но ваш код основан на фундаментальном недопонимании Html и HtmlUnit.

HtmlPage p = wb.getPage(.....

извлекает (html) страницу. Эта страница отображается в окне браузера (то же самое в HtmlUnit). Если вы взаимодействуете с элементами на этой странице, например

form.get(0).getInputByName("loginname").setValueAttribute("1234567");

или лучше

form.get(0).getInputByName("loginname").type("1234567");

эти элементы меняют свое состояние и в результате изменяется вся страница. Но: Нажатие кнопки «Отправить» - это совершенно другая история. В этом случае браузер (и также HtmlUnit) отправляет Http-запрос на сервер и возвращает новый HtmlPage. Обычно эта страница отображается в том же окне.

В HtmlUnit это отражается в возвращаемом значении метода click - возвращаемым значением является новая страница. Пока вы не присваиваете это значение переменной страницы и делаете следующие шаги на этой новой странице, вы все еще работаете со старой.

Кстати: на странице Getting Started HtmlUnit есть закомментированный пример.

Пока что самая простая версия обработки формы / отправки. Но сегодня идеи немного (на самом деле много битов) более сложны, потому что большинство страниц делают (дополнительную) магию, основанную на javascript (например, Ajax).

Предложение: если вы отправите мне некоторые учетные данные по личной почте, я могу попытаться помочь вам заставить этот логин работать на основе HtmlUnit.

Предложение 2: Постарайтесь изучить и понять все технические вещи, связанные с Интернетом, без этого вы потеряетесь.

...