Я экспериментировал с HtmlUnit на днях. Я написал программу, которая выполняет вход на сайт и собирает некоторую информацию. Но при нажатии на определенную кнопку htmlUnit не ждет результата. Я попытался подождать, пока все работы из JavascriptJobManager не будут выполнены, но он застрянет примерно на 15 рабочих местах. После этого я попытался подождать, пока результат htmlpage не изменится, но это тоже не сработает. Что я мог попробовать дальше? Спасибо за ваше время, и я постараюсь как можно быстрее реализовать любое предложение.Ожидание Javascript с HtmlUnit
Редактировать: Я полностью знаю, что facebook не любит веб-поиск, но я делаю это только для учебных целей, поэтому никакого вреда не наносит. После сообщений об ошибках программа бросает. http://www.pastebin.ca/3007578
При нажатии кнопки infoButton появляется новое окно, что делает недоступным старое окно. http://imgur.com/aiF7nJR
final static WebClient webClient = new WebClient(BrowserVersion.FIREFOX_31);
public static void main(String [] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException, InterruptedException{
//init webclient
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.getOptions().setRedirectEnabled(true);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getCookieManager().setCookiesEnabled(true);
webClient.getOptions().setThrowExceptionOnScriptError(true);
webClient.getOptions().setCssEnabled(true);
webClient.getOptions().setUseInsecureSSL(true);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.waitForBackgroundJavaScript(12000);
webClient.setAlertHandler(new AlertHandler() {
@Override
public void handleAlert(Page arg0, String arg1) {
System.out.println("ALERT ON "+arg0.getUrl()+" :"+ arg1);
}
});
// perform the login
final HtmlPage loginPage = webClient.getPage("https://facebook.com");
final HtmlForm form = loginPage.getForms().get(0);
final HtmlTextInput username = form.getInputByName("email");
final HtmlPasswordInput password = form.getInputByName("pass");
final HtmlElement button = (HtmlElement) loginPage.getElementById("u_0_l");
username.setText("Your email");
password.setText("Your password");
final HtmlPage frontPage = (HtmlPage) button.click();
// The actual problem
final HtmlPage testPage = webClient.getPage("https://www.facebook.com/pages/Stackoverflow/1462865420609264");
HtmlElement infoButton = testPage.getFirstByXPath("//*[@class='share_action_link']"); // First share button.
HtmlPage testPage2 = infoButton.click();
JavaScriptJobManager manager = testPage2.getEnclosingWindow().getJobManager();
while (manager.getJobCount() > 0) {
Thread.sleep(1000);
webClient.waitForBackgroundJavaScript(100);
System.out.println(manager.getEarliestJob());
}
while(testPage == testPage2){
System.out.println("failed");
webClient.waitForBackgroundJavaScript(100);
Thread.sleep(5 * 1000);
}
}
Вы отключите исключение JavaScript для исключения, вы должны включить это, чтобы понять, почему он не работает. Также, пожалуйста, используйте v 2.16, и укажите свой URL-адрес и кнопку, чтобы другие могли проверить –
Спасибо Ahmed за ответ. Я отредактировал сообщение, чтобы иметь минимальный рабочий пример. Кроме того, я связывал исключения и ошибки, которые создает программа. К сожалению, я не понимаю, как их исправить. – Schnorzel