Я пытаюсь использовать HtmlUnit (2.35) в Java по этому URL-адресу https://www.pharmacy.ohio.gov/Licensing/RosterRequests.aspx, чтобы выбрать параметры из переключателей, а затем нажать кнопку загрузки и получить файл.
I 'Я вполне уверен, что я правильно установил переключатели, но я не уверен, нажимаю ли я кнопку или, если да, то как определить начало загрузки, которая завершается обратной передачей (я думаю).
Я пытался дождаться Javascript, отключить Javascript, выполнить цикл в течение 60 секунд, проверяя contentType и создавая прослушиватель.
Я также подумал о том, чтобы загрузить форму со страницы, так как, возможно, действие HtmlUnit click () просто запускало Javascript и не выполняло действие post, но HtmlUnit не может найти форму на странице дажехотя он там есть.
public static void main( String[] args ) throws IOException, InterruptedException {
WebClient webClient;
webClient = new WebClient( BrowserVersion.FIREFOX_60 );
webClient.getOptions().setJavaScriptEnabled(false);
webClient.getOptions().setUseInsecureSSL(true);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setSSLClientProtocols(new String[]{"TLSv1.2","TLSv1.1","TLSv1"});
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
HtmlPage MainPage = (HtmlPage) webClient.getPage("https://www.pharmacy.ohio.gov/Licensing/RosterRequests.aspx");
HtmlElement body = MainPage.getBody();
if (dbg) System.out.println("MainPage = " + MainPage);
\\ All of the below are empty:
System.out.println( "MainPageForm = " + MainPage.getFirstByXPath( "//*[@id=\"form1\"]"));
System.out.println( "Form List = " + MainPage.getElementsByIdAndOrName( "form#form1"));
System.out.println( "Form List = " + MainPage.getForms());
System.out.println( "Form? = " + MainPage.querySelector("#form1"));
System.out.println( "Form? = " + MainPage.getFirstByXPath( "//form[@action=\"RosterRequests.aspx\"]" ));
System.out.println( "Form? = " + MainPage.getElementById( "#form1"));
System.out.println( "MainPageButton = " + MainPage.getFirstByXPath( "//*[@id=\"phBody_rblLicenseType_5\"]") );
\\ Code to click buttons:
HtmlRadioButtonInput rad_status = (HtmlRadioButtonInput)MainPage.getHtmlElementById("phBody_rblLicenseStatus_1");
rad_status.setChecked( true );
HtmlRadioButtonInput rad_tddd = MainPage.getHtmlElementById( "phBody_rblLicenseType_1");
rad_tddd.setChecked( true );
HtmlInput btn_download = (HtmlInput)MainPage.getHtmlElementById( "phBody_btnSubmit" );
WebResponse response = btn_download.click().getWebResponse();
\\ ContentType never changes
int tries = 30;
while ( tries > 0 ) {
//System.out.println( response.getWebRequest().toString());
System.out.println( response.getContentType());
synchronized (response) { response.wait(1000);}
tries--;
}
webClient.close();
}
Ничего не загружается и ContentType никогда не изменяется.В браузере инструменты разработчика показывают, что страница aspx перезагружается с другим ContentType, который вызывает диалог загрузки.