【问题标题】:JSOUP: set form dataJSOUP:设置表单数据
【发布时间】:2017-07-01 02:45:35
【问题描述】:

我正在创建一个使用 JSOUP 的 JAVA 程序。这就是我的想法:

我想使用 WordNet (http://wordnetweb.princeton.edu/perl/webwn)。 我有一个基本表单,用户可以在其中输入字符串。它检查字符串是否是英语词典中的单词。 当您提交表单时,URL 会发生变化。我得到这个 URL 使用。然后我检查某个 h3 标签,该标签仅在不是单词时才出现。

我的问题能够填写表单并使用 JSOUP 提交,并获取提交的 URL。

这是表格

<form method="get" action="webwn" enctype="multipart/form-data" name="f">
Word to search for: 
<input type="text" name="s" maxlength="500">
<input type="submit" name="sub" value="Search WordNet">
<input type="hidden" name="o2" value="">
<input type="hidden" name="o0" value="1">
<input type="hidden" name="o8" value="1">
<input type="hidden" name="o1" value="1">
<input type="hidden" name="o7" value="">
<input type="hidden" name="o5" value="">
<input type="hidden" name="o9" value="">
<input type="hidden" name="o6" value="">
<input type="hidden" name="o3" value="">    
<input type="hidden" name="o4" value="">
<input type="hidden" name="h" value="">
</form>

我不知道该怎么办。这是我唯一坚持的部分。 到目前为止我试过了,但它没有做任何事情

public static String getUrl(String search) throws IOException{
        String url = "http://wordnetweb.princeton.edu/perl/webwn";
        Document doc = Jsoup.connect(url)
                .data("S", search)
                .data("o2", "")
                .data("o0", "1")
                .data("o8", "1")
                .data("o1", "1")
                .data("o7", "")
                .data("o5", "")
                .data("o9", "")
                .data("o6", "")
                .data("o3", "")
                .data("o4", "")
                .data("h", "")
                .post();
        String newURL = doc.location().toString();
        System.out.println(newURL);
        return (newURL);
}

【问题讨论】:

    标签: java forms jsoup wordnet


    【解决方案1】:

    您可以通过操作 url 的端点来搜索您想要的内容:

    http://wordnetweb.princeton.edu/perl/webwn?s= 并将您要搜索的内容连接到它。

    如果您要搜索的单词是"bill",那么

    /*
     * returns url of search term using jsoup
     */
    public static String getUrl(String search) throws IOException{
        String url = "http://wordnetweb.princeton.edu/perl/webwn?s=";
        Document doc = Jsoup.connect(url + search).get();
        String newURL = doc.location().toString();
        System.out.println(newURL);
        return (newURL);
    }
    

    如果你只是想测试一个词是否是一个词,你可以这样做

    /*
     * returns true if is a word
     */
    public static boolean isWord(String search) throws IOException{
    
        String url = "http://wordnetweb.princeton.edu/perl/webwn?s=";
        String notAWord = "Your search did not return any results.";
    
        Document doc = Jsoup.connect(url + search).get();
        String searchH3 = doc.select("h3").text();
    
        return searchH3.contains(notAWord) ? false : true;
    
    }
    

    如果您想发出发布请求,但是您可以使用Connection.Response 来获得您的post 的响应。您只需要将 import org.jsoup.Connection 作为导入来使用连接 API。

    public static String getUrl(String search) throws IOException{
    
        Connection.Response wordForm = Jsoup.connect("http://wordnetweb.princeton.edu/perl/webwn")
                .method(Connection.Method.GET)
                .execute();
    
        String url = "http://wordnetweb.princeton.edu/perl/webwn";
        Document doc = Jsoup.connect(url)
                .data("s", search)
                .data("o2", "")
                .data("o0", "1")
                .data("o8", "1")
                .data("o1", "1")
                .data("o7", "")
                .data("o5", "")
                .data("o9", "")
                .data("o6", "")
                .data("o3", "")
                .data("o4", "")
                .data("h", "")
                .cookies(wordForm.cookies())
                .post();
    
        System.out.println(doc);
    
        String newURL = doc.location().toString();
        return (newURL);
    }
    

    类似的例子可以找到here

    【讨论】:

    • 非常感谢!!我不知道我能做到这一点。
    • 如果您好奇,我更新了有关如何解决您当前案例的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 2021-10-27
    • 2015-08-30
    相关资源
    最近更新 更多