我想撰寫一個可以從路由器收集資料的腳本,在本例中為 5268AC。到目前為止,我已經能夠使用response.get()從不需要設備訪問代碼來查看資訊的 URL 獲取資訊。要獲取有關 Wifi 的資訊,例如默認 SSID,我需要通過瀏覽器輸入位于路由器上的訪問代碼。嘗試時我不斷收到錯誤 500 request.post(url)。
url="http://192.168.1.254/xslt?PAGE=C_2_1"
根據檢查,我相信這是我正在嘗試填寫的表格。關鍵值是ADM_PASSWORD。
<h2>Login</h2>
<p>Device access code required. Please enter the device access code, then click Submit.</p>
<form name="pagepost" method="post" action="xslt?PAGE=login_post" id="pagepost">
<input type="hidden" name="NONCE" value="0abc59f54121398" />
<input type="hidden" name="THISPAGE" value="" />
<input type="hidden" name="NEXTPAGE" value="C_2_1" />
<input type="hidden" name="CMSKICK" value="" />
<div>
<div class="form-group">
<label for="ADM_PASSWORD">Access code</label>
<span>
<input type="password" id="ADM_PASSWORD" name="ADM_PASSWORD" size="16" maxlength="16" autofocus="autofocus" required="required" autocomplete="off" />
</span>
</div>
</div>
<p align="right">
<input type="submit" class="button" value="Submit" />
我試過這個但得到 500 狀態錯誤。
payload = { 'ADM_PASSWORD':'*access code*' }
response = requests.post(url, headers=headers, data=payload)
有沒有辦法通過請求而不是使用 GUI 來收集資訊?
uj5u.com熱心網友回復:
首先在Chrome/Firefox您可以使用DevTools(tab: Network) 查看登錄時瀏覽器發送的內容。
表格有action="xslt?PAGE=login_post"所以你應該發送到
url = "http://192.168.1.254/xslt?PAGE=login_post"
它是相對路徑 - 所以如果你打開頁面,即。http://http://192.168.1.254/login/那么它需要
url = "http://192.168.1.254/login/xslt?PAGE=login_post"
您必須發送input您在表格中看到的所有內容 - 特別是hidden。
有時它甚至可能需要submit.
你應該使用name=作為鍵,而不是id=
payload = {
'NONCE': '0abc59f54121398',
'THISPAGE': '',
'NEXTPAGE': 'C_2_1',
'CMSKICK': '',
'ADM_PASSWORD': '*access code*'
}
如果您使用post()with data=orjson=那么它應該會自動在 and 中設定正確的值,Content-Type而Content-Length您不必在headers.
您也可以先運行get()到帶有表單的頁面,因為它可能會設定服務器/設備也可能檢查的 cookie。
只有當頁面使用 JavaScript 在其中生成一些額外的資料form并且它需要使用Selenium時才會出現問題- 但它需要用Selenium
有時我向它發送請求https://httpbin.org/post,它會將它從我那里獲得的所有標題、cookie、發布資料發回給我,我可以將它與我在DevTools.
Evetually 我使用本地代理服務器Charles并在瀏覽器和 Python 中使用它來查看代碼是否發送與瀏覽器相同的資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/442001.html
上一篇:使用R進行網頁抓取-表格內容
