当前位置: 首页 > 知识库问答 >
问题:

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

慕晨
2023-03-14

我正在尝试使用HTMLUnit(第一次)从特定页面中提取数据。具体来说,我目前正在尝试按ID(搜索框)抓取超文本标记语言元素。

但我遇到了:

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个答案

鱼浩荡
2023-03-14

该网站是用Angular编写的SPA(单页应用程序)。您需要JavaScript来运行它。

不幸的是,HtmlUnit的JavaScript功能不足以运行Angular,因此您的方法无法工作。

您可以尝试:

  • 逆向工程页面并获取SPA正在访问的底层资源
  • 试试Selenium ChromeDriver(它实际打开Chrome并模拟页面上的按钮点击)
 类似资料:
  • 我很难理解这个HTMLUnit异常的含义。当我在网页上的链接上调用click()时,就会发生这种情况。

  • 我使用selenium IDE 1.9.0记录测试。请告诉我什么地方没有错,以及如何解决问题。 以下是我记录测试的步骤。1.我使用用户名和密码登录网站。2.我导航到搜索成员页面,输入成员的姓名,单击名称链接。系统将引导我进入成员配置文件页面。 脚本停在这一行: 我第一次玩脚本时,它运行没有任何错误。在运行该脚本8小时后,它提示我以下错误: 我使用调试函数来查看出了什么问题。以下是调试窗格中显示的消

  • 这里有两个代码段,我正在使用它们从具有“From Date”和“To Date”的日历中搜索日期。 错误消息显示:线程“main”组织中出现异常。openqa。硒。NoSuchElementException:没有这样的元素:无法定位元素:{“method”:“xpath”,“selector”:“//table/tbody/tr/a[包含(text(),'十月三十日')]”“}

  • 问题内容: 我不得不重新测试,以前工作正常,但现在却出现了错误。 我也尝试过使用其他定位器,例如。但仍然出现相同的错误。 问题答案: 当您访问url时,有一个阻止UI的Ajax加载器,因此我们必须等待Ajax加载器完成所有WebElement的加载,并且and 字段变为可见。为了实现这一目标,我们将推出即与设置为对field.Here是工作代码块:

  • URL:http://bcmprod.brill.com/rsuite-cms/ 我正在尝试从上面的客户端站点自动下载手稿。我在C#中使用selenium phantomjs。 我有用户凭据。但是,组成登录表单的元素(例如用户名、密码)在页面源中不存在,但当您在浏览器中检查这些元素时,这些元素就存在了。 这些是我用来从“检查元素”中定位它们的xpath(ID是动态分配的,这就是我没有使用它们的原因

  • 问题内容: 我从这篇博客文章中获得了帮助: 但是我发现com.mysql.jdbc.driver类未找到异常。那篇博客文章的不同之处在于,在我的案例中,他们尝试连接到mysql而不是MS SQL。到目前为止,这是我的代码:package com.example.dbtry; 请告诉我我在做什么错。我还在清单中添加了对Internet的许可。 问题答案: 从以下位置下载jar:http://www.