【问题标题】:Java SE: Open Web Page and Click a ButtonJava SE:打开网页并单击按钮
【发布时间】:2013-05-25 03:36:11
【问题描述】:


我有一个 Java 7 程序(使用 WebStart 技术,仅适用于 Windows 7/8 计算机)。

我需要添加一个函数,以便我的程序单击具有已知 URL (https) 的页面上的按钮。

有些人建议使用 WebKit SWT,但我去了他们的网站,他们说该项目已停止。 (http://www.genuitec.com/about/labs.html)

其他人说 JxBrowser 是唯一的选择,但它看起来超过 1,300 美元,这太疯狂了。 (http://www.teamdev.com/jxbrowser/onlinedemo/)

我正在寻找简单、免费、轻量级的东西,并且能够打开 HTTPS 链接、解析 HTML、通过 DOM 访问按钮并单击它。也许还有一些 JavaScript,以防有 JS 处理程序。

感谢您的帮助。

【问题讨论】:

  • JavaFx 随 java 7 一起提供,并且有一个基本上是浏览器的 webview 对象。

标签: java


【解决方案1】:

您可能正在寻找HtmlUnit -- “Java 程序的无 GUI 浏览器”

这是一个示例代码,它打开 google.com,使用表单搜索 "htmlunit" 并打印结果数。

import com.gargoylesoftware.htmlunit.*;
import com.gargoylesoftware.htmlunit.html.*;

public class HtmlUnitFormExample {
    public static void main(String[] args) throws Exception {
        WebClient webClient = new WebClient();
        HtmlPage page = webClient.getPage("http://www.google.com");

        HtmlInput searchBox = page.getElementByName("q");
        searchBox.setValueAttribute("htmlunit");

        HtmlSubmitInput googleSearchSubmitButton = 
                          page.getElementByName("btnG"); // sometimes it's "btnK"
        page=googleSearchSubmitButton.click();

        HtmlDivision resultStatsDiv =
                                page.getFirstByXPath("//div[@id='resultStats']");

        System.out.println(resultStatsDiv.asText()); // About 309,000 results
        webClient.closeAllWindows();
    }
}

其他选项有:

  • Selenium:会打开火狐之类的浏览器进行操作。
  • Watij:也会打开一个浏览器,但在它自己的窗口中。
  • Jsoup: 好的解析器。不过没有 JavaScript。

【讨论】:

  • HtmlUnit 不打开任何浏览器,它模拟一个。它是完整的 Java 代码。
【解决方案2】:

你的问题有点难以理解你想要什么。如果你有一个 webstart 应用,并且想在浏览器中打开一个链接,你可以使用java.awt.Desktop.getDesktop().browse(URI) 方法。

public void openLinkInBrowser(ActionEvent event){

    try {
        URI uri = new URI(WEB_ADDRESS);
        java.awt.Desktop.getDesktop().browse(uri);

    } catch (URISyntaxException | IOException e) {
        //System.out.println("THROW::: make sure we handle browser error");
        e.printStackTrace();
    }

}

【讨论】:

  • 点击按钮怎么样?允许吗?
  • 是的,使用传递给它的 ActionEvent 调用的方法很容易被按钮触发。
猜你喜欢
  • 2012-01-28
  • 1970-01-01
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多