Java 如何使用jsoup提交表单

Java 如何使用jsoup提交表单,java,javascript,screen-scraping,jsoup,Java,Javascript,Screen Scraping,Jsoup,我想从一个有几个表单的网页提交表单。我特别想在下面提交这份表格 <form action="realDisplay.asp" method="post" name="Search" onSubmit="return validate(this); return submitForm();" target="_blank"> <table width="98%" align="center" cellspacing="0" cellpadding="

我想从一个有几个表单的网页提交表单。我特别想在下面提交这份表格

<form action="realDisplay.asp" method="post" name="Search" onSubmit="return validate(this); return submitForm();" target="_blank">
               <table width="98%" align="center" cellspacing="0" cellpadding="0" border="1" bordercolor="#FFFFFF">
              <tr>
                 <td width="127" class="style62" align="right">Parcel ID</td>
                <td width="286">
                  <div align="center">
                    <table border="0" cellpadding="0" cellspacing="0" width="100%%" align="center">
                      <tr>
                        <td align="left" class="style62">&nbsp;
                        <input name="rePID" size="15" maxlength="15" value="">
                         <br>
                          <font class="style65">( 12 123 12 123)</font></td>
                      </tr>
                    </table>
                  </div> 
                </td>
                </tr>
                <tr>
                 <td width="127" class="style62" align="right">Partial Parcel ID</td>
                <td width="286">
                  <div align="center">
                    <table border="0" cellpadding="0" cellspacing="0" width="100%%" align="center">
                      <tr>
                        <td align="left" class="style62">&nbsp;
                        <input name="rePartialPID" size="15" maxlength="15" value="">
                         <br>
                          <font class="style65">( 12 123)</font></td>
                      </tr>
                    </table>
                  </div> 
                </td>
                </tr>
              <tr>
                <td class="style62" align="right">Address</td>
                <td class="style62" align="left">&nbsp;
                  <input name="Address" size="38" maxlength="50" value="">
                </td>
              </tr>
               <tr>
                <td class="style62" align="right" nowrap="nowrap">Partial Street Name</td>
                <td class="style62" align="left">&nbsp;
                  <input name="streetName" size="38" maxlength="50" value="">
                </td>
              </tr>
              <tr>
                <td class="style62" align="right" nowrap="nowrap">Owner Name</td>
                <td class="style62" align="left">&nbsp;
                  <input name="OwnerName" size="30" maxlength="50" value="">   
                </td>
              </tr>
              <tr>
                <td colspan="2"><br /><font class="style64">Insert</font>
                  <font class="style65"><u>Either</u></b></font><font class="style64">&nbsp;a</font>:<br>
                 <br>
                 <table align="center" border="1" cellspacing="0" cellpadding="3" bgcolor="#E8E8E8">
                    <tr>
                      <td align="left"><img src="Images/arrow_1.gif" width="9" height="7" vspace="0" hspace="8"></td>
                      <td class="style75" align="left">
                      <a class="nav4" href="GlossaryTermWin.htm#ParcelID" onClick="NewWindow(this.href,'PARCELID','635','635','yes');return false;">
                     Parcel ID</a> , or Partial Parcel ID</td>
                    </tr>
                    <tr>
                    </tr>
                    <tr>
                      <td>
                      <img src="Images/arrow_1.gif" width="9" height="7" vspace="0" hspace="8"></td>
                      <td class="style75" align="left">Address (eg. 123 main), or</td>
                    </tr>
                    <tr>
                      <td class="style75" align="left">
                      <img src="Images/arrow_1.gif" width="9" height="7" vspace="0" hspace="8"></b></font></td>
                      <td class="style75">Partial Street Name (eg. main), or</td>
                    </tr>
                    <tr>
                      <td class="style75">
                      <img src="Images/arrow_1.gif" width="9" height="7" vspace="0" hspace="8"></b></font></td>
                      <td class="style75" align="left">Owner Name <br />(eg. LastName,FirstName <br />or
                              Partial Owner Name)</td>
                    </tr>
                </table> </td>
              </tr>
              <tr>
                 <td colspan="2">&nbsp;</td>
                    </tr>
              <tr>
                <td height="26" colspan="2" align="center">
                <input type="image" valign="top" name="Submit" value="Search" src="images/search.jpg" align="top" alt="Search by either the Parcel ID or Address or Owner Name that is associated by the real estate information.">
                <a href="javascript:document.forms[0].reset()" border="0"><img src="images/reset.jpg" align="top" border="0" alt="Reset the values on this page." onClick="ResetForm()"></a></td>
              </tr>
  </table>
</form></td>
我想能够查看我提交此表单后出现的网页,也可以查看该页面的文本内容,还想获取url

我必须在Java代码中做些什么来确保提交请求已提交,并在提交表单后查看下一页的内容


我能够使用Htmlunit提交表单,您可以搜索web并下载包

import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
import com.gargoylesoftware.htmlunit.html.HtmlImageInput;
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;

WebClient webClient = new WebClient(BrowserVersion.FIREFOX_10);
final HtmlPage searchPage = webClient.getPage("http://web.somewebsite.asp"); 

    final HtmlForm form = searchPage.getFormByName("Search"); 
    final HtmlTextInput textField = form.getInputByName("rePID");
    textField.setValueAttribute("15 197 14 007");
    final HtmlImageInput button = form.getInputByName("Submit"); 
    HtmlPage searchResultPage = (HtmlPage)button.click();

首先,您需要调查页面本身。 Chrome有很好的内置功能来支持它。只需按F12,您将看到相当多的选项,您可以调查几乎所有与特定HTML请求相关的内容。 新版本的IE也有类似的功能。Firefox有很好的firebug扩展

您可以看到服务器使用的cookie。也许你错过了他们。 通常,最重要的一个是设置Cookie。 您需要将其添加到您将在Post Html请求中发送的Cookie Post请求中

在本例中,还需要检查java脚本函数SubmitForm。请记住,JavaScript可能不会从代码中调用。您需要发送请求的页面将是“realDisplay.asp”

有时,浏览器发送带有URL字符串中某些参数的post请求,如GET。 请检查一下。使您的POST请求与浏览器使用的完全相同

请检查通过浏览器登录时的会话时间。 要保持会话,您需要向应用程序发送一些请求。如果未发送,则需要重新登录

在cookies中使用jsoup还有另一个答案


如果您需要更多信息,请告诉我。

首先,您需要调查页面本身。 Chrome有很好的内置功能来支持它。只需按F12,您将看到相当多的选项,您可以调查几乎所有与特定HTML请求相关的内容。 新版本的IE也有类似的功能。Firefox有很好的firebug扩展

您可以看到服务器使用的cookie。也许你错过了他们。 通常,最重要的一个是设置Cookie。 您需要将其添加到您将在Post Html请求中发送的Cookie Post请求中

在本例中,还需要检查java脚本函数SubmitForm。请记住,JavaScript可能不会从代码中调用。您需要发送请求的页面将是“realDisplay.asp”

有时,浏览器发送带有URL字符串中某些参数的post请求,如GET。 请检查一下。使您的POST请求与浏览器使用的完全相同

请检查通过浏览器登录时的会话时间。 要保持会话,您需要向应用程序发送一些请求。如果未发送,则需要重新登录

在cookies中使用jsoup还有另一个答案


如果您需要更多信息,请让我知道。

查看最后一个参数,我想您需要在表单中添加提交按钮,并将其作为参数传递。谢谢您为我指明了正确的方向。我的Java代码如下所示:Document doc=Jsoup.connect(“).data(“rePID”,“15 197 14 007”).data(“Submit”,“Search”).post();提交表单后如何查看生成的网页。您可以解析获得的jsoup文档,也可以在我尝试doc.html()时字符串html=document.html();它显示了我提交表单的网页内容。我无法获得提交表单后的下一页。我可以使用HTMLUnit提交表单查看最后一个参数我想您需要在表单中添加提交按钮并将其作为参数传递感谢您为我指出了正确的方向。我的va代码如下所示:Document doc=Jsoup.connect(“).data(“rePID”,“1519714007”).data(“Submit”,“Search”).post(); 提交表单后如何查看生成的网页。您可以解析获得的jsoup文档,也可以字符串html=document.html();当我尝试doc.html()时;它显示了我提交表格的网页内容。我无法获得提交表单后的下一页。我可以使用Htmlunit提交表单
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
import com.gargoylesoftware.htmlunit.html.HtmlImageInput;
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;

WebClient webClient = new WebClient(BrowserVersion.FIREFOX_10);
final HtmlPage searchPage = webClient.getPage("http://web.somewebsite.asp"); 

    final HtmlForm form = searchPage.getFormByName("Search"); 
    final HtmlTextInput textField = form.getInputByName("rePID");
    textField.setValueAttribute("15 197 14 007");
    final HtmlImageInput button = form.getInputByName("Submit"); 
    HtmlPage searchResultPage = (HtmlPage)button.click();
Connection.Response res = Jsoup.connect("http://www.example.com/login.php")
.data("username", "myUsername", "password", "myPassword")
.method(Method.POST)
.execute();

Document doc = res.parse();