我是Java新手,需要编写各种java应用程序来进行网页抓取和网页交互。
我开始使用Selenium,但由于它直接与浏览器交互,因此对我的使用不切实际。
我需要执行以下任务: 1.转到特定URL 2.在输入字段中输入邮政编码 3.单击“提交”按钮 4.解析并保存特定div标签或重新查询页面的结果。
我正在使用HTMLUnit和Eclipse。 我可以通过引用表单然后输入名称来访问网页并在输入中输入邮政编码。 但是,当我尝试单击提交按钮时,我收到ElementNotFoundException错误。
以下是如何在页面上实施提交按钮的示例:
type="submit" value="submit" name="submit">Enter post code
以下是我的代码:
package htmlunittest;
import java.io.IOException;
import java.net.URL;
import junit.framework.TestCase;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.Page;
import com.gargoylesoftware.htmlunit.RefreshHandler;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlDivision;
import com.gargoylesoftware.htmlunit.html.HtmlButtonInput;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlImage;
import com.gargoylesoftware.htmlunit.html.HtmlInput;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
public class htmlunittest extends TestCase{
@SuppressWarnings("deprecation")
public static void main(String[] args) throws Exception
{
final WebClient webClient = new WebClient();
final HtmlPage startPage = webClient.getPage("http://www.testpage.com");
final HtmlForm form = (HtmlForm) startPage.getForms().get(2);
final HtmlTextInput textField = form.getInputByName("address");
textField.setValueAttribute("my post code");
//throws ElementNotFoundException
final HtmlSubmitInput button = form.getInputByName("submit");
// Now submit the form by clicking the button and get back the second page.
final HtmlPage page2 = button.click();
System.out.println(page2.getHtmlElementById("mainContent"));
webClient.closeAllWindows();
}
}
有人可以指出我是如何通过HTMLUNIT点击提交按钮的正确方向吗?
由于
答案 0 :(得分:0)
如果没有您尝试获取的整个页面,找出原因无法解决的问题有点困难。
我敢打赌你没有使用.get(2)
获得正确的表单,顺便说一下,获取表单通常是一个坏主意,因为如果目标页面略微更改其源代码只是为了添加表单在那之上,你的刮刀将无法再次使用,因为索引会有所不同。