Java 如何使用Htmlunit为隐藏的输入设置值?

Java 如何使用Htmlunit为隐藏的输入设置值?,java,web-scraping,webclient,htmlunit,Java,Web Scraping,Webclient,Htmlunit,我无法使用Htmlunit设置隐藏输入的值。我试图为3个字段将值设置为HtmlHiddenInput,但在第2次时间(ward)时失败。将值设置为第一个输入后,ajax调用将在不更改URL的情况下进行,并将值列表设置为下一个下拉列表,在该下拉列表中我无法选择值 WebClient webClient = new WebClient(BrowserVersion.FIREFOX_38); webClient.getOptions().setJavaScriptEnabled(false); web

我无法使用
Htmlunit
设置隐藏输入的值。我试图为3个字段将值设置为
HtmlHiddenInput
,但在第2次
时间(ward)
时失败。将值设置为第一个输入后,ajax调用将在不更改URL的情况下进行,并将值列表设置为下一个下拉列表,在该下拉列表中我无法选择值

WebClient webClient = new WebClient(BrowserVersion.FIREFOX_38);
webClient.getOptions().setJavaScriptEnabled(false);
webClient.getOptions().setCssEnabled(true);
webClient.getOptions().setRedirectEnabled(true);
webClient.getOptions().setUseInsecureSSL(true);
webClient.getOptions().setTimeout(100000);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.getCookieManager().setCookiesEnabled(true);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.waitForBackgroundJavaScript(120000);
webClient.getCookieManager().setCookiesEnabled(true);

//hosp
HtmlHiddenInput hiddenHosp = (HtmlHiddenInput) form1.getInputByName("ctl00_ContentPlaceHolder1_Hospital_ClientState");
String hosp1 ="{\"logEntries\":[],\"value\":\"\",\"text\":\"Royal Marsden1 Royal Marsden NHS Foundation Trust RM CHELSEA\",\"enabled\":true,\"checkedIndices\":[],\"checkedItemsTextOverflows\":false}";
hiddenHosp.setValueAttribute(hosp1);

//ward
HtmlHiddenInput hiddenWard = (HtmlHiddenInput) form1.getInputByName("ctl00_ContentPlaceHolder1_Ward_ClientState");
String ward1="{\"logEntries\":[],\"value\":\"%\",\"text\":\"All\",\"enabled\":true,\"checkedIndices\":[],\"checkedItemsTextOverflows\":false}";
hiddenWard.setValueAttribute(ward1);

//status
HtmlHiddenInput hiddenStatus = (HtmlHiddenInput) form1.getInputByName("ctl00_ContentPlaceHolder1_Status_ClientState");
String status1 = "{\"logEntries\":[],\"value\":\"%\",\"text\":\"All\",\"enabled\":true,\"checkedIndices\":[],\"checkedItemsTextOverflows\" :false}";
hiddenStatus.setValueAttribute(status1);
截图: 又一次。。。 waitForBackgroundScrip()不是一个选项。您必须调用它,例如在设置输入之后

您禁用了Javascript支持,但如果没有Javascript,Ajax将根本无法工作。通常不需要更改任何默认选项。只有当你面对问题并且知道自己在做什么时,才改变它们


最后,请至少在问题中添加您正在使用的版本。

我们需要查看您的HTML才能提供帮助。请阅读。@MaxVollmer我已经在开始时用html图像链接编辑了这个问题,请看一看……提前谢谢你,为我的愚蠢错误感到抱歉,我是stackoverflow的新成员。请帮助我哪里出了问题,我是否缺少任何webClient.getOptions().xyz,或者为什么没有将值设置为第二个下拉列表(看起来是下拉列表,但它是带按钮的文本输入,带来动态无序列表抱歉,我没有提到最新版本,启用javascript不会设置3个值中的任何一个,但在将其设置为false后禁用它会起作用…在其他情况下,我可以设置所有3个值,但选择第一个下拉列表后发生的ajax调用除外。)不允许更改第二个下拉列表的值。它不能是最新版本,因为该版本不支持ff38。在我使用2.19之前,但现在我已将其更改为2.31,而不是ff_38,我已设置WebClient WebClient=new WebClient(BrowserVersion.BEST_supported);如果我哪里出错,请纠正我!!