Подтвердить что ты не робот

HtmlUnit, как отправить форму без нажатия кнопки отправки?

Я знаю, что в HtmlUnit я могу fireEvent отправить в форму, и он будет опубликован. Но что, если я отключил javascript и хотел бы опубликовать форму, используя некоторую встроенную функцию?

Я проверил javadoc и не нашел способа сделать это. Странно, что в HtmlForm нет такой функции...


Я прочитал javadoc и учебник на странице htmlunit, и я знаю, что я могу использовать getInputByName() и щелкнуть по нему. BuT иногда есть формы, у которых нет кнопки типа отправки или даже есть такая кнопка, но без атрибута имени.

Я прошу о помощи в такой ситуации, поэтому я использую fireEvent, но это не всегда работает.

4b9b3361

Ответ 1

Вы можете использовать кнопку "временно" отправки:

WebClient client = new WebClient();
HtmlPage page = client.getPage("http://stackoverflow.com");

// create a submit button - it doesn't work with 'input'
HtmlElement button = page.createElement("button");
button.setAttribute("type", "submit");

// append the button to the form
HtmlElement form = ...;
form.appendChild(button);

// submit the form
page = button.click();

Ответ 2

WebRequest requestSettings = new WebRequest(new URL("http://localhost:8080/TestBox"), HttpMethod.POST);

// Then we set the request parameters
requestSettings.setRequestParameters(Collections.singletonList(new NameValuePair(InopticsNfcBoxPage.MESSAGE, Utils.marshalXml(inoptics, "UTF-8"))));

// Finally, we can get the page
HtmlPage page = webClient.getPage(requestSettings);

Ответ 3

final HtmlSubmitInput button = form.getInputByName("submitbutton");
final HtmlPage page2 = button.click()

Из htmlunit doc

@Test
public void submittingForm() throws Exception {
    final WebClient webClient = new WebClient();

    // Get the first page
    final HtmlPage page1 = webClient.getPage("http://some_url");

    // Get the form that we are dealing with and within that form, 
    // find the submit button and the field that we want to change.
    final HtmlForm form = page1.getFormByName("myform");

    final HtmlSubmitInput button = form.getInputByName("submitbutton");
    final HtmlTextInput textField = form.getInputByName("userid");

    // Change the value of the text field
    textField.setValueAttribute("root");

    // Now submit the form by clicking the button and get back the second page.
    final HtmlPage page2 = button.click();

    webClient.closeAllWindows();
}

Ответ 4

Как насчет использования встроенной поддержки javascript? Просто отправьте событие в эту форму:

HtmlForm form = page.getForms().get(0);
form.fireEvent(Event.TYPE_SUBMIT);

Код предполагает, что вы хотите отправить первую форму на сайт.

И если отправка пересылает вас на другой сайт, просто привяжите ответ к переменной страницы:

HtmlForm form = page.getForms().get(0);
page = (HtmlPage) form.fireEvent(Event.TYPE_SUBMIT).getNewPage();