2015-05-06 4 views
0

Я экспериментировал с 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); 
    } 
} 
+0

Вы отключите исключение JavaScript для исключения, вы должны включить это, чтобы понять, почему он не работает. Также, пожалуйста, используйте v 2.16, и укажите свой URL-адрес и кнопку, чтобы другие могли проверить –

+0

Спасибо Ahmed за ответ. Я отредактировал сообщение, чтобы иметь минимальный рабочий пример. Кроме того, я связывал исключения и ошибки, которые создает программа. К сожалению, я не понимаю, как их исправить. – Schnorzel

ответ

1

С latest snapshot (в мавена также), произошла ошибка, что window.performance не определен, который был зафиксирован.

EDIT: была обнаружена еще одна обнаруженная ошибка, исправлено и снимок сделан.

Повторите попытку

+0

Hey Ahmed, для быстрой помощи, но к сожалению, обновление до 2.17 не решило проблему. Программа по-прежнему бросает те же исключения и ошибки. Кнопка, которую я хочу получить, должна быть доступна в пределах Facebook. Я добавил фотографию, вкратце объясняя желаемый результат. – Schnorzel

+0

До сих пор регистрация для меня работает с нажатием на элемент «u_0_n», и есть исключение, но для этого требуется отладка локальной копии JS и сравнение с реальными браузерами, как это намечено в http://htmlunit.sourceforge.net/submittingJSBugs. html –

+0

Привет, вы попробовали еще раз, после 10 мая? –

Смежные вопросы