【问题标题】:HtmlUnit get submit button from form by it's value?HtmlUnit 通过它的值从表单中获取提交按钮?
【发布时间】:2014-01-05 14:31:00
【问题描述】:
<input type="submit" class="submit-button" style="white-space:normal" value="hello world!">

这就是 HTML 提交按钮的工作方式,在 HTMLUNIT 中我已经得到了表单,使用列表:

HtmlForm form = this.page.getForms().get(0);

但现在我尝试加载的网站在提交按钮上没有 id 或名称,只有一个类和一个值。

我试过这样做:

HtmlButton button = (HtmlButton) page.getByXPath("/html/body//form//input[@type='submit' and @value='Hello world!']");

但是当它加载时,我得到这个错误:

Exception in thread "Thread-1" java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.gargoylesoftware.htmlunit.html.HtmlButton
    at Web.getButton(Web.java:78)
    at java.lang.Thread.run(Unknown Source)

如何获取没有 id 或 value 的按钮?

【问题讨论】:

    标签: java htmlunit


    【解决方案1】:

    只需在表单上使用getInputByValue(String) 方法:

    HtmlForm form = this.page.getForms().get(0);
    System.out.println(form.getInputByValue("Hello world!").asXml());
    

    【讨论】:

      【解决方案2】:

      page.getByXPath("/html/body//form//input[@type='submit' and @value='Hello world!']"); 返回一个List

      HtmlButton button = (HtmlButton) page.getByXPath("/html/body//form//input[@type='submit' and @value='Hello world!']"); 将尝试将此List 转换为HtmlButton,这总是会引发异常。

      如果您确定只有一个元素将始终与 XPath 表达式匹配,那么只选择列表的第一个(也是唯一一个)元素应该是安全的:

      HtmlButton button = (HtmlButton) page.getByXPath("/html/body//form//input[@type='submit' and @value='Hello world!']").get(0);
      

      但是,如果我是你,我会添加对不存在元素以及列表是否包含多个元素的检查。

      【讨论】:

        【解决方案3】:

        使用这个

        HtmlElement input = form.getElementsByAttribute("input", "value", "hello world!").get(0);
        

        获取元素并点击该元素

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-17
          • 1970-01-01
          • 2021-04-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多