找不到元素异常:HTMLUnit - 按ID搜索

问题描述 投票:0回答:1

我试图使用HTMLUnit(第一次)从特定页面中提取数据。具体来说,我目前正在尝试按ID(搜索框)抓取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问题的帮助将不胜感激。

java xml web-scraping htmlunit
1个回答
1
投票

该网站是一个用Angular编写的SPA(单页面应用程序)。你需要JavaScript才能运行它。

不幸的是,HtmlUnit的JavaScript功能不足以运行Angular,所以你的方法不起作用。

你可以试试:

  • 对页面进行反向工程并获取SPA正在访问的基础资源
  • 试试Selenium ChromeDriver(它实际上会打开Chrome并模拟页面上的按钮点击)
© www.soinside.com 2019 - 2024. All rights reserved.