頭條創作挑戰賽# 在Excel VBA中,HTMLDOMTextNode對象是HTML文檔對象模型(DOM)中的一個對象,它代表HTML文檔中的文本節點。文本節點是HTML文檔中的一種節點類型,它包含純文本內容,例如段落中的文字或標題中的文字。通過訪問HTMLDOMTextNode對象,可以獲取和修改HTML文檔中的文本內容。
當操作HTML文檔時,HTMLDOMTextNode對象是非常有用的。以下是6個Excel VBA代碼示例,演示了如何使用HTMLDOMTextNode對象:
1、獲取文本節點的文本內容
Set objTextNode = objHTMLDoc.getElementById("text")
strTextContent = objTextNode.innerText
2、修改文本節點的文本內容
Set objTextNode = objHTMLDoc.getElementById("text")
objTextNode.innerText = "New text content"
3、查找包含特定文本的文本節點
Set objTextNodes = objHTMLDoc.getElementsByTagName("p")
For Each objTextNode In objTextNodes
If InStr(objTextNode.innerText, "search phrase") > 0 Then
' Do something with the text node
End If
Next objTextNode
4、在文本節點中插入新的文本
Set objTextNode = objHTMLDoc.getElementById("text")
objTextNode.insertData 5, " new text "
5、替換文本節點中的文本
Set objTextNode = objHTMLDoc.getElementById("text")
objTextNode.replaceData 5, 3, "new"
6、刪除文本節點中的文本
Set objTextNode = objHTMLDoc.getElementById("text")
objTextNode.deleteData 5, 3
在使用HTMLDOMTextNode對象時,需要注意以下幾個方面:
1、獲取文本節點對象時,要確保該節點是存在的。如果節點不存在,嘗試訪問其屬性或方法可能會導致運行時錯誤。
2、修改文本節點的內容時,要確保新內容不會破壞HTML文檔的結構。例如,在文本節點中添加HTML標記可能會導致解析錯誤。
3、在處理包含多個文本節點的HTML元素時,需要注意它們之間的空格字符。在某些情況下,空格字符可能會被視為文本節點的一部分,從而影響文本內容的處理。
4、在查找包含特定文本的文本節點時,要注意搜索條件的準確性。如果搜索條件不準確,可能會返回不正確的結果。
5、在插入、替換或刪除文本時,要確保操作的位置和長度是正確的。如果位置或長度不正確,可能會導致文本內容的破壞。
總之,在使用HTMLDOMTextNode對象時,需要對HTML文檔的結構和內容有一定的了解,并且要謹慎處理文本內容,以避免出現錯誤。
tmlProject對象代表了一個HTML項目。HTML項目是一個包含了HTML文件、腳本和樣式表等資源的項目。通過HtmlProject對象,可以訪問和操作HTML項目中的各種元素,比如HTML文件、腳本和樣式表等。可以通過HtmlProject屬性來獲取當前活動工作簿中的HtmlProject對象。
以下是5個代碼實例來說明HtmlProject對象的使用:
1、獲取活動工作簿中的HtmlProject對象:
Dim htmlProj As HtmlProject
Set htmlProj = ThisWorkbook.VBProject.References.Item("HTMLProject").HtmlProject
2、在HTML項目中添加一個新的HTML文件:
Dim htmlFile As HtmlFile
Set htmlFile = htmlProj.AddHtmlFile("NewFile.html")
htmlFile.CodeModule.AddFromString "<html><body><h1>Hello, World!</h1></body></html>"
3、在HTML項目中添加一個新的腳本文件:
Dim scriptFile As ScriptFile
Set scriptFile = htmlProj.AddScriptFile("Custom.js")
scriptFile.CodeModule.AddFromFile "C:\path\to\Custom.js"
4、在HTML項目中添加一個外部樣式表文件:
Dim styleSheetFile As StyleSheetFile
Set styleSheetFile = htmlProj.AddStyleSheetFile("styles.css")
styleSheetFile.CodeModule.AddFromString "body{background-color:lightblue;}"
5、遍歷HTML項目中的所有HTML文件并顯示它們的名稱:
Dim htmlFile As HtmlFile
For Each htmlFile In htmlProj.HtmlFiles
Debug.Print htmlFile.Name
Next htmlFile
這些代碼示例展示了如何使用HtmlProject對象來操作HTML項目中的不同元素,包括HTML文件、腳本文件和樣式表文件等。
在使用HtmlProject對象時,需要注意以下幾點:
1、引用:使用HtmlProject對象之前,需要確保已經引用了“Microsoft HTML Object Library”。在VBA編輯器中,通過依次點擊“工具”->“引用”,然后勾選“Microsoft HTML Object Library”來添加引用。
2、可用性:HtmlProject對象只能在包含有HTML項目的工作簿中使用。如果工作簿中沒有HTML項目,那么訪問HtmlProject對象將會導致錯誤。
3、資源:HtmlProject對象代表了一個包含了HTML文件、腳本和樣式表等資源的項目。在使用HtmlProject對象之前,需要確認相關資源已經存在,并且對它們進行正確的引用和操作。
4、方法和屬性:HtmlProject對象提供了一些方法和屬性,用于訪問和操作HTML項目中的各種元素。在使用這些方法和屬性時,需要仔細閱讀相關文檔并遵循正確的語法和用法。
5、錯誤處理:在使用HtmlProject對象時,可能會遇到各種錯誤情況,比如資源不存在或者操作失敗等。為了避免程序異常終止,需要適當地添加錯誤處理代碼,以捕獲和處理可能發生的錯誤。
總之,使用HtmlProject對象需要確保正確的引用和環境,并且了解相關的方法和屬性,以確保能夠正確訪問和操作HTML項目中的元素。
分享成果,隨喜正能量】人的一生,肯定會遭遇各種挫折與挑戰,莫大的壓力會讓你喘不過氣??墒?,只有真正懂得適時彎腰的人才能得以克服危機,贏得勝利。這不是懦弱,也不是沒骨氣,而是一種大智慧。強干、蠻干,只會帶來不可必要的損失。
《VBA信息獲取與處理》教程是我推出第六套教程,目前已經是第一版修訂了。這套教程定位于最高級,是學完初級,中級后的教程。這部教程給大家講解的內容有:跨應用程序信息獲得、隨機信息的利用、電子郵件的發送、VBA互聯網數據抓取、VBA延時操作,剪貼板應用、Split函數擴展、工作表信息與其他應用交互,FSO對象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定制工作表信息函數等等內容。程序文件通過32位和64位兩種OFFICE系統測試。是非常抽象的,更具研究的價值。
教程共兩冊,八十四講。今日的內容是專題六“VBA中利用XMLHTTP完成網抓數據”的第3講:VBA網抓數據結果的鏈接
在上一講中我們實現了利用XMLHTTP的方法抓取了搜索關鍵詞的數據,但是我們在網絡查詢的時候,往往不僅需要總的數據支持,還需要一些具體的數據,比如:查找到了哪些網址,標題是什么?如果我需要進一步的查看往往要需要打開的鏈接。這種數據如何抓取呢?這講我就來實現這個問題。
實現的場景:如下圖當我們點擊右側的按鈕“利用VBA提取搜索關鍵詞的數據,并給出下載的鏈接”時能夠在下面的數據區域給出查詢到的結果。
其實,這種處理也是工作中經常遇到的,可以對于我們瀏覽的網頁進行適當的保存,在需要的時候再詳細的查詢。特別是把這些數據保存在EXCEL表格中,更讓管理條理清晰。那么如何實現這個場景呢?我們仍是利用XMLHTTP來完成我們的工作。
我們先模擬一下直接在網頁上查詢數據,當我們輸入一個數據點擊回車的時候,服務器會反饋回數據在我們的瀏覽器上,我們需要對網頁的源代碼進行分析,
上面的截圖就是我錄入“VBA語言專家”點擊回車后的在后臺看到的源代碼,你會發現,所有我們要寫入EXCEL表格的信息都出現在了這里。
其中“標題”可以用innerText屬性來獲得,鏈接可以用href的屬性來獲得,真的非常容易,下面我們就要實現把多頁查詢的結果填到excel表格中,這個時候我們利用發送給服務器時要求頭部檢查一下查詢的時間即可如下代碼:.setRequestHeader "If-Modified-Since", "0"
這樣就可以實現我們的要求了。
下面我們把上面的思路轉換為代碼,如下所示:
Sub myNZA() '利用VBA提取搜索關鍵詞的數據,并給出下載的鏈接
【具體見教程】
End Sub
代碼截圖:
代碼講解:
1) Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
Set objDOM = CreateObject("htmlfile")
上述代碼建立了兩個引用,一個是XMLHTTP ,一個是htmlfile ,之后將利用這兩個引用完成我們的工作。
2)UU = Range("B1").Value 這是我們要查詢的關鍵數據
3)For i = 0 To 50 Step 10 '五頁 這是要查詢5次利用i作為查詢的頁碼
4) strURL = "https://www.baidu.com/s?"
strURL = strURL & "wd=" & UU
strURL = strURL & "&pn=" & i
上述代碼是完成了我們要查詢的請求URL。
5) .Open "GET", strURL, False 使用OPEN 方法
6) .setRequestHeader "If-Modified-Since", "0" 請求頭部把瀏覽器端緩存頁面的最后修改時間一起發到服務器去,服務器會把這個時間與服務器上實際文件的最后修改時間進行比較,以保障我們每次請求到的數據是沒有重復的。
7) .send 注意請求頭部的提交要在此命令之前完成
8)objDOM.body.innerHTML = .responseText '將.responseText內容寫入新objDOM對象的body
9) For Each objTitle In objDOM.getElementsByTagName("h3") 在每個H3標簽即標題進行遍歷操作。注意<h1> 到 <h6>是標簽標題。<h1> 定義最大的標題。<h6> 定義最小的標題。
10)With objTitle.getElementsByTagName("a")(0) 對于每個屬性名稱為為“a”的元素
11)Cells(k, 2) = .innerText
Cells(k, 3) = .href
提取標簽之間的純文本信息和鏈接
12)Set objXMLHTTP = Nothing
Set objDOM = Nothing
Set objTitle = Nothing
回收內存。
我們先來看看當我們點擊運行按鈕后的實現效果:
此時我們任意點擊一個單元格的鏈接,就會轉跳到下面的頁面:
從而實現了我們最初的課題要求。
本節知識點回向:如何利用XMLHTTP反饋網頁中的關鍵詞的搜索結果和網頁的鏈接?
本講參考程序文件:006工作表.XLSM
我20多年的VBA實踐經驗,全部濃縮在下面的各個教程中,教程學習順序:
*請認真填寫需求信息,我們會在24小時內與您取得聯系。