Java SE:打开网页并点击按钮

11


我有一个运行在Java 7上的程序(使用WebStart技术,仅适用于Windows 7/8电脑)。

我需要添加一个功能,让我的程序点击已知URL(https)上的按钮。

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

其他人说JxBrowser是唯一的选择,但它的价格超过1300美元,这太离谱了。(http://www.teamdev.com/jxbrowser/onlinedemo/

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

感谢您的帮助。


JavaFx随Java 7一起发布,并具有Webview对象,该对象基本上是一个浏览器。 - assylias
2个回答

13

您可能正在寻找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:将打开类似Firefox的浏览器并对其进行操作。
  • Watij:也会打开浏览器,但在它自己的窗口中。
  • Jsoup:良好的解析器。但没有JavaScript。

HtmlUnit不会打开任何浏览器,而是模拟一个浏览器。它是完全使用Java编写的代码。 - acdcjunior

0

您的问题有点难以理解您想要什么。如果您有一个 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();
    }

}

点击按钮怎么样?它允许吗? - Serge Vinogradoff
是的,使用传递给它的ActionEvent调用的方法可以很容易地由按钮触发。 - Matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接