Исключение не найдено: HTMLUnit - поиск по идентификатору - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь использовать HTMLUnit (впервые) для извлечения данных с определенных страниц. В частности, в настоящее время я пытаюсь получить HTML-элемент по идентификатору (поле поиска).

Но я сталкиваюсь с:

Exception in thread "main" com.gargoylesoftware.htmlunit.ElementNotFoundException: elementName=[*] attributeName=[id] attributeValue=[space_search_keyword]
    at com.gargoylesoftware.htmlunit.html.HtmlPage.getHtmlElementById(HtmlPage.java:1547)
    at com.gargoylesoftware.htmlunit.html.HtmlPage.getHtmlElementById(HtmlPage.java:1517)
    at Test.main(Test.java:33)

Это мой код:

import java.util.List;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HTMLParserListener;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class Test {

    public static void main(String[] args) {

        HtmlPage page = null;

        WebClient client = new WebClient();
        client.setCssEnabled(false); 
        client.setJavaScriptEnabled(false);

        try {  
          String searchUrl = "https://25live.collegenet.com/umassd/#space_search[0]";
          page = client.getPage(searchUrl);
        }catch(Exception e){
          e.printStackTrace();
        }


        //System.out.println(page.asXml());
        HtmlElement searchBox = (HtmlElement)page.getHtmlElementById("space_search_keyword");

    }

}

При дальнейшей проверке с использованием page.asXML () кажется, что страница загружается неправильно, и поэтому не может найти элемент? Я не уверен, почему он не загружается для HTMLUnit. Вход в систему не требуется, вы можете увидеть страницу, созданную для себя, введя ее в браузере.

Любая помощь с отладкой подобных проблем HTMLUnit будет принята с благодарностью.

1 Ответ

1 голос
/ 22 марта 2019

Сайт представляет собой СПА (одностраничное приложение), написанное на английском языке. Вам нужен JavaScript для его запуска.

К сожалению, возможности JavaScript HtmlUnit недостаточно для запуска Angular, поэтому ваш подход не будет работать.

Вы можете попробовать:

  • Обратный инжиниринг страницы и выбор базового ресурса, к которому обращается SPA
  • Попробуйте Selenium ChromeDriver (он фактически открывает Chrome и симулирует нажатия кнопок на странице)
...