2011-09-27 108 views
13

我知道,在HtmlUnit我可以fireEvent提交表格,它會被張貼。但是,如果我禁用JavaScript,並想使用一些內置函數發佈表單?HtmlUnit,如何在不點擊提交按鈕的情況下發布表單?

我檢查了javadoc,並沒有找到任何方法來做到這一點。奇怪的是,沒有在HtmlForm控件沒有這種功能...


我閱讀頁面的HtmlUnit的javadoc和教程,我知道我可以使用getInputByName()並單擊它。 BuT有時候會有表單沒有提交類型按鈕 甚至有這樣的按鈕但沒有名稱屬性。

我在這種情況下尋求幫助,這就是爲什麼我使用fireEvent但它並不總是工作。

+0

我建議你使用'HttpURLConnection',並按照指示概述[這裏](HTTP:/ /stackoverflow.com/questions/2793150/how-to-use-java-net-urlconnection-to-fire-and-handle-http-requests)。或者使用Apache的'HttpClient'類。 – mrkhrts

+0

再次檢查JavaDoc :)或者還有簡介 - >入門一節,就像Ransom Briggs所做的那樣。我不會去mrkhrts的方法......它太低級 –

回答

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

the 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(); 
} 
+2

OP被編輯,現在它說沒有提交按鈕。 – Gray

38

您可以使用 '臨時' 的提交按鈕:

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(); 
+1

這是輝煌的 – Leo

+0

你我的朋友是一個天才!已經爲此工作了一個星期了! – duffanpj

+0

這是解決方案,我過去用過很多瓷磚,從來沒有任何問題。 –

7
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); 
1

如何獲得的使用內置的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(); 
相關問題