簡體   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