javascript - 使用 JSoup 获取通过 onclick 按钮 javascript 隐藏的表格内容

标签 javascript java jsoup

我正在创建一个网页抓取供个人在游戏中使用。 这是我要抓取的网站:http://forum.toribash.com/clan_war.php?clanid=139

我想计算“显示详细信息”中出现的名称的频率。

我读过这篇文章Get content from javascript onClick hyperlink不知道这是否真的是我正在寻找的。我怀疑这不是我正在寻找的东西,但无论如何我还没有尝试回答这些问题,因为我不知道如何制作这个 https://stackoverflow.com/a/12268561/10467473符合我想要的。

        BufferedReader month = new BufferedReader(new InputStreamReader(System.in));
        String mth = month.readLine();
        //Accessing the website
        Document docs = Jsoup.connect("http://forum.toribash.com/clan_war.php?clanid=139").get();

        //Taking every entry of war history
        Elements collection = docs.getElementsByClass("war_history_entry");
        //Itterate every collection
        for(Element e : collection){
            //if the info is on the exact month that are being searched we will use the e
            if(e.getElementsByClass("war_info").text().split(" ")[1].equalsIgnoreCase(mth)){
                //supposedly it holds every element that has player as it class inside of the button onclick
                //But it doesn't work
                Elements cek = e.getElementsByClass("player");
                for(Element c : cek){
                    System.out.println(c.text());
                }
            }

现在我希望至少能得到显示详细信息表上的名称

Kaito
Chax
Draku

等等

最佳答案

此页面不包含您要抓取的信息。单击按钮后,结果将通过 AJAX (Javascript) 加载。 您可以使用 Web 浏览器的调试器查看“网络”选项卡,看看单击该按钮时会发生什么情况。 单击按钮

<button id="buttonwarid19557"  ... >

从 URL 加载表格:

http://forum.toribash.com/clan_war_ajax.php?warid=19557&clanid=139

注意相同的 ID 号。

你要做的就是从每个按钮获取 id,然后获取每个按钮的另一个文档并逐个解析它。无论如何,这就是您的网络浏览器所做的事情。

        BufferedReader month = new BufferedReader(new InputStreamReader(System.in));
        String mth = month.readLine();
        //Accessing the website
        Document docs = Jsoup.connect("http://forum.toribash.com/clan_war.php?clanid=139").get();

        //Taking every entry of war history
        Elements collection = docs.getElementsByClass("war_history_entry");
        //Itterate every collection
        for(Element e : collection){
            //if the info is on the exact month that are being searched we will use the e
            if(e.getElementsByClass("war_info").text().split(" ")[1].equalsIgnoreCase(mth)){
                // selecting button
                Element button = e.selectFirst("button");
                // getting warid from button id
                String buttonId = button.attr("id");
                // removing text because we need only number
                String warId = buttonId.replace("buttonwarid", "");

                System.out.println("downloading results for " + e.getElementsByClass("war_info").text());
                // downloading and parsing subpage containing table with info about single war
                // adding referrer to make the request look more like it comes from the real web browser to avoid possible hotlinking protection
                Document table = Jsoup.connect("http://forum.toribash.com/clan_war_ajax.php?warid=" + warId + "&clanid=139").referrer("http://forum.toribash.com/clan_war.php?clanid=139").get();
                // get every <td class="player"> ... </td>
                Elements players = table.select(".player");
                for(Element player : players){
                    System.out.println(player.text());
                }
            }
        }

关于javascript - 使用 JSoup 获取通过 onclick 按钮 javascript 隐藏的表格内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54436062/

相关文章:

javascript - 为什么我在执行 Django 时会收到此 javascript 错误?

javascript - 在新选项卡中打开链接的对话框

performance - 带有矢量图层的 Leaflet.js 非常慢

java不能引用非final变量

java - 计时对象的生命周期

Hadoop 中的 Java 代码

java - 带有负载的 Jsoup HTTP POST

javascript - VS Code 中自动格式的左括号前没有空格

JavaFx Group 内容位置在转换后发生变化

java - 将值输入到文本字段,流回网站