有人可以幫我指出正確的方向,讓我的代碼再次作業嗎?“老方法”已經通過 VBA 作業了多年,它定期查詢下面的網站以通過 Internet Explorer 收集天氣。但是,現在呼叫 IE 的那一刻,它在 Edge 中打開并且代碼失敗。
我一直在嘗試通過 XML v6 獲得相同的代碼,并且幾乎通過“新方式”取得了成功。我可以加載單個頁面,但我需要合并在網站上按下按鈕之前將區號輸入到搜索框中的邏輯。輸入框是 HTMLDoc.getElementById("keyword"),按鈕是 HTMLDoc.getElementsByTagName("button")。只有在輸入該區域并按下按鈕后,才會回傳該區域的天氣。
是否可以以新方式進行此查詢?
我還了解到這可能通過 Selenium 和 VBA 中的 Web 驅動程式查詢實作。但是,我聽說每次 Microsoft Edge 獲得更新時,您都需要為 Web 驅動程式下載一個新的驅動程式,考慮到查詢的基本程度,這似乎有點過頭了。
提前致謝!
詹姆士
老辦法
//參考:Microsoft Internet Controls、Microsoft HTML Object Library
Dim IE As New SHDocVw.InternetExplorer
Dim HTMLDoc As MSHTML.HTMLDocument
Dim HTMLInput As MSHTML.IHTMLElement
Dim HTMLButtons As MSHTML.IHTMLElementCollection
IE.Visible = True
IE.Navigate ("www.bom.gov.au/aviation/forecasts/taf/")
//issue is that ie does not seem to exist, think it is because this actually redirects to edge now so code crashes from this point
Do While IE.ReadyState <> READYSTATE_COMPLETE
Loop
Debug.Print IE.LocationName; IE.LocationURL
Set HTMLDoc = IE.Document
Set HTMLInput = HTMLDoc.getElementById("keyword")
HTMLInput.Value = "20"
Set HTMLButtons = HTMLDoc.getElementsByTagName("button")
HTMLButtons(0).Click
新方法
//參考資料:Microsoft XML, v6.0
Dim XMLPage As New MSXML2.XMLHTTP60
Dim HTMLDoc As New MSHTML.HTMLDocument
XMLPage.Open "GET", "http://bom.gov.au/aviation/forecasts/taf/", False
XMLPage.send
HTMLDoc.body.innerHTML = XMLPage.responseText
Call ProcessHTMLPage(HTMLDoc)
uj5u.com熱心網友回復:
使用 XMLHTTP,您不必像在瀏覽器中那樣與網頁互動,因為內容是靜態的,而現代網站如今大多動態生成其內容。
從 DevTools 檢查網站,似乎搜索觸發了一個 POST 請求,http://www.bom.gov.au/aviation/php/process.php以關鍵字作為回傳結果的資料,因此這就是您必須復制的內容。
以下是使用YBWPas 關鍵字的示例代碼(更改常量或適應您的代碼)并將輸出插入到 Sheet1 中,從 cell 開始A1:
Sub Test()
Const searchKeyWord As String = "YBWP"
Dim XMLPage As New MSXML2.XMLHTTP60
Dim HTMLDoc As New MSHTML.HTMLDocument
Dim requestData As String
requestData = "keyword=" & searchKeyWord & "&type=search&page=TAF"
XMLPage.Open "POST", "http://www.bom.gov.au/aviation/php/process.php", False
XMLPage.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
XMLPage.send requestData
HTMLDoc.body.innerHTML = XMLPage.responseText
Dim resultColl As Object
Set resultColl = HTMLDoc.getElementsByTagName("p")
Dim i As Long
For i = 0 To resultColl.Length - 1
ThisWorkbook.Worksheets("Sheet1").Cells(i 1, 1).Value = resultColl(i).innerText
Next i
End Sub
運行這將回傳XMLPage.responseText如下:
<h3>WEIPA YBWP</h3><p class="product">TAF YBWP 251217Z 2514/2602<br />10006KT 9999 SCT020<br />RMK<br />T 27 25 25 30 Q 1011 1009 1011 1012</p><p class="product">METAR YBWP 251230Z AUTO 00000KT 9999 // SCT027 SCT033 BKN047 28/24<br />Q1012 RMK RF00.0/000.0</p>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/337528.html
上一篇:為什么XContainer.Add方法無論如何都會向添加的元素添加“xmlns”屬性,我該如何阻止這種行為?
下一篇:*/在XPath中是什么意思?
