Есть ли способ вызвать событие прокрутки с помощью HtmlUnit или это вообще невозможно?

В настоящее время я изучаю HtmlUnit для очистки веб-сайтов. Все шло хорошо и гладко, пока я не столкнулся с динамической страницей (например, я использую сайт Pinterest), на которой элементы добавляются на лету, когда пользователь прокручивает страницу вниз.

Я пробовал несколько способов, которые должны вызывать прокрутку в реальном браузере (я покажу их ниже). Прежде чем идти дальше, я хотел бы упомянуть, что у меня уже установлена ​​следующая конфигурация:

    webclient.setJavaScriptEnabled(true);
    webclient.setAjaxController(new NicelyResynchronizingAjaxController());

Допустим, я хочу, чтобы все мои подписчики были в Pinterest. Я перехожу на эту страницу, и теперь, когда у вас в первый раз только 24 из них, я хочу прокрутить вниз, событие, которое запускает вызов Ajax на сервер и получает следующий набор подписчиков.

1) Простой код JavaScript или jQuery для запуска прокрутки в окне.

    ScriptResult sr = followersPage.executeJavaScript("window.scrollBy(0,1000)");
    // One version in jQuery
    // ScriptResult sr = followersPage.executeJavaScript("$(window).scrollTop(0,1000);");
    // also tried with the body, html, with animation
    // ScriptResult sr = followersPage.executeJavaScript("$("html, body").animate({ scrollTop: $(document).height() }, 1000);");
    webclient.waitForBackgroundJavaScript(10000);
    followersPage = (HtmlPage)sr.getNewPage();

=> Когда я проверяю расстояние до вершины, оно равно 0, и страница результатов совпадает с исходной страницей. Во время отладки в Eclipse, когда я перехожу через строку, где выполняется javascript, он напрямую переходит на следующую строку без каких-либо задержек. Если я напишу любой другой javascript, например, например:

     ScriptResult sr = followersPage.executeJavaScript("$(div.GridItems).html('new content')");

, вы можете заметить, что отладчик зависает на этой строке на полсекунды, что означает, что javascript выполняется.

2) Измените фокус с одной привязки подписчика на другую (я выбрал привязку, потому что она используется в порядке фокусировки при нажатии клавиши TAB):

    HtmlDivision gridItems = followersPage.getFirstByXPath("//div[contains(concat(' ',@class,' '),' GridItems ')]");
    List<HtmlDivision> els = (List<HtmlDivision>) gridItems.getByXPath("//div[@class='item ']");
    List<HtmlDivision> items = (List<HtmlDivision>) gridItems.getByXPath("//div[@class='item ']");
    for (HtmlDivision item : items) {
        HtmlAnchor a = item.getFirstByXPath("//a[@class='userWrapper']");
        a.focus();
        webClient.waitForBackgroundJavaScript(1000);
    }
    followersPage = (HtmlPage) webClient.getCurrentWindow().getEnclosedPage();

Опять же, прокрутка не произошла , Страница результатов остается такой же, как и в оригинале

3) Создайте кнопку, которая запускает событие прокрутки в окнах:

    HtmlButton scrollButton = (HtmlButton) followersPage.createElement("button");
    scrollButton.setAttribute("type", "button");
    scrollButton.setAttribute("onclick", "window.scrollTo(0,document.body.scrollHeight);");
    gridItems.appendChild(scrollButton);
    followersPage = scrollButton.click();

К сожалению, это не сработало.

Я пробовал много других методов, но до сих пор не получил положительного результата.

Я прочитал много связанных статей, также здесь, на stackoverflow, по этой теме. И кажется, что никому не удалось заставить работать прокрутку с помощью HtmlUnit, так как большинство вопросов остались без ответа. Вот почему мне интересно, была ли эта функция когда-либо функциональной.

Кому-то удалось прокрутить страницу (простая страница, без ajax)? Кому-то удалось прокрутить страницу, событие, которое вызвало какой-то вызов ajax?

10
задан DjCode 6 May 2014 в 10:05
поделиться