繁体   English   中英

执行第二个POST方法JSoup

[英]Execute second POST method JSoup

我想提取调制解调器雷达上的无线信号。 为此,我正在尝试使用JSoup将víaWeb连接到调制解调器。 为此,请按照以下步骤操作:

  1. 使用凭据登录。
  2. 访问内部链接Wifi调查。
  3. 按下扫描按钮。

按下扫描按钮后,我必须至少等待5秒钟才能获得无线列表。 这是我到目前为止的内容:

Extraccion.java

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;


import javax.net.ssl.*;
import java.awt.*;
import java.io.IOException;

import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import java.util.Map;


public class Extraccion {

    private void disableSSLCertCheck() throws NoSuchAlgorithmException, KeyManagementException {
        // Create a trust manager that does not validate certificate chains
        TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return null;
            }
            public void checkClientTrusted(X509Certificate[] certs, String authType) {
            }
            public void checkServerTrusted(X509Certificate[] certs, String authType) {
            }
        }
        };

        // Install the all-trusting trust manager
        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, new java.security.SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

        // Create all-trusting host name verifier
        HostnameVerifier allHostsValid = new HostnameVerifier() {
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        };

        // Install the all-trusting host verifier
        HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
    }

    public static void main(String[] args) throws IOException, KeyManagementException, NoSuchAlgorithmException, AWTException {
        Robot r = new Robot();
        Extraccion e = new Extraccion();
        e.disableSSLCertCheck();

        // Here I get the form content '/goform/login'
        Connection.Response loginForm = Jsoup.connect("https://ip_address/goform/login")
                .method(Connection.Method.GET)
                .data("cookieexists", "false")
                .data("user", "admin")
                .data("pws", "admin")
                .data("Login", "Login")
                //.cookies(loginCookies)
                .method(Connection.Method.POST)
                .execute();

        Map<String, String> loginCookies = loginForm.cookies();
        //r.delay(5000);
        Document document2 = Jsoup.connect("https://ip_address/admin/feat-lan-ip.asp")
                .cookies(loginCookies)
                .get();
        Element tableDHCP = document2.getElementById("connected_computers");
        System.out.println("Printing connected devices");
        System.out.println(tableDHCP);

        Connection.Response submitButton = Jsoup.connect("https://ip_address/goform/WlsRadar")
                .data("setRadar", "scan")
                .data("dir", "admin/")
                .data("file", "wireless_radar")
                .cookies(loginCookies)
                .method(Connection.Method.POST)
                .execute();
        r.delay(20000);
        loginCookies = submitButton.cookies();
        document2 = Jsoup.connect("https://ip_address/admin/wireless_radar.asp")
                .cookies(loginCookies)
                .get();
        Element tableWireless_radar = document2.getElementById("maincontent");
        System.out.println("Printing radar wireless");
        System.out.println(tableWireless_radar);
    }
}

我可以登录该页面,但无法按“扫描”按钮。 按钮的部分页面如下所示:

wireless_radar.asp

<form name="RadarForm" action="/goform/WlsRadar" method="post">
<input type="hidden" value="admin/" name="dir">
<input type="hidden" value="wireless_radar" name="file">
<input type="hidden" value="" name="setRadar">
<p id="introduction"></p>

<p id="title1"><span class="LANGS" id="Wireless_WifiSiteSurvey_Title">Survey Result</span></p>
<div id="content1">
<table class="checklist1" id="wlsRadar_table">
<tbody><tr class="item">
<td class="wireless_radar2"><span class="LANGS" id="Wireless_WifiSiteSurvey_Channel">ch</span></td>
<td class="wireless_radar6"><span class="LANGS" id="Wireless_WifiSiteSurvey_Ssid">SSID</span></td>
<td class="wireless_radar7"><span class="LANGS" id="Wireless_WifiSiteSurvey_Bssid">BSSID</span></td>
<td class="wireless_radar8"><span class="LANGS" id="Wireless_WifiSiteSurvey_Security">Security</span></td>
<td class="wireless_radar3"><span class="LANGS" id="Wireless_WifiSiteSurvey_siganl">signal(%)</span></td>
<td class="wireless_radar4"><span class="LANGS" id="Wireless_WifiSiteSurvey_Wmode">W-mode</span></td>
<td class="wireless_radar4"><span class="LANGS" id="Wireless_WifiSiteSurvey_ExtenelChannel">ExtCH</span></td>
<td class="wireless_radar2"><span class="LANGS" id="Wireless_WifiSiteSurvey_Inservice">NT</span></td>
<td class="wireless_radar5"><span class="LANGS" id="Wireless_WifiSiteSurvey_WPS">WPS DPID</span></td>
</tr>
</tbody></table>

</div>  <!--end of content1-->
<div id="content1">
<center>
<span class="LANGS" id="Wireless_WifiSiteSurvey_ScanButton"><input type="submit" class="button" value="Scan" onclick="ScanRadar()"></span>
<span class="LANGS" id="Wireless_WifiSiteSurvey_ClearButton"><input type="submit" class="button" value="Clear" onclick="clearResult()"></span>
<center>
</center></center></div>
</form>
</div>

我要按的按钮是“扫描”,但似乎没有ID。 知道它如何工作吗?

PS:每当我单击“扫描”按钮时,此代码:

<input type="hidden" value="" name="setRadar">

更改为:

<input type="hidden" value="scan" name="setRadar">

我不知道您的路由器,但是wifi调查网站似乎执行了一些JavaScript。 JSoup无法运行JavaScript。 它不是浏览器。 它只是解析HTML并在内存中创建该HTML的DOM表示。

您或者想使用一个真正的浏览器并通过Java进行控制(例如,参见selenium webdriver),或者您可以分析JavaScript的实际作用,并触发AJAX调用或其他操作。 如果可以正确重现所有参数,则可以使用JSoup模仿此类AJAX调用。 使用浏览器开发人员的工具找出路由器网站上实际发生的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM