我一直在用几个网站测试HtmlUnit;在所有这些网站中,他们都有 点击时单击按钮或复选框等元素,然后单击 该网站上的个人资料已更新;你不需要提交表格或 任何东西。但是当我采用与HtmlUnit完全相同的动作时,我的个人资料 在服务器上没有真正更新。我必须做一些特别的事吗? 例如同步HtmlUnit所具有的页面的本地副本 服务器,以便服务器看到更改?举个例子,我添加了我的 用于在私人/公共和恶习的网站上切换我的简历的代码 反之亦然。当我在浏览器上访问该页面时,我所要做的就是单击一个 两个单选按钮,使简历公共/私人;但是当我这样做的时候 在HtmlUnit上一样,然后去浏览浏览器页面查看,我可以看到服务器上的信息没有被更改。我有 包括我的代码如下。请注意,我有另一种登录方法 该网站,我知道我正确登录。鉴于这种情况正在发生 我的网站对我来说,我想也许有一些事情就像我正在做的那样与服务器同步。
=====================================
public void update(String urlOfThePage)
{
// First, declare any element name or xapth that you are going to
use. String xpathOfIsPublicRadioButton = "//input[@id='privacy_show']";
String xpathOfIsPrivateRadioButton = "//input[@id='privacy_hide']";
// Get the first page
try
{
final HtmlPage resumePage = (HtmlPage) webclient.getPage(urlOfThePage);
CrawlerUtility.savePage(resumePage, "resumePage");
final HtmlRadioButtonInput makePublicRadioButton =
(HtmlRadioButtonInput)
resumePage.getFirstByXPath(xpathOfIsPublicRadioButton);
final HtmlRadioButtonInput makePrivateRadioButton =
(HtmlRadioButtonInput)
resumePage.getFirstByXPath(xpathOfIsPrivateRadioButton);
Page result = null;
if (isProfilePublic())
{
result = makePrivateRadioButton.click();
System.out.println("The Profile is changed to private
now.");
Thread.sleep(60000);
}
else
{
result = makePublicRadioButton.click();
System.out.println("The Profile is changed to public now.");
Thread.sleep(60000);
}
}
catch (Throwable e)
{
e.printStackTrace();
}//End of try/catch block.
}//End of update().
答案 0 :(得分:1)
如果您没有提交表单,那么您可能会在幕后使用AJAX将数据发送到服务器。 HTML单元不会将其发送到服务器,因为它不会处理AJAX请求。您需要的是更复杂的东西,例如Sikuli http://www.sikuli.org,它实际上会以与用户完全相同的方式点击您网页上的元素。您还可以尝试使用特定于Web浏览器的Selenium(http://www.seleniumhq.org/)。