我試圖使用InternetExplorerMedium對象從網頁中獲取信息。獲取信息的基本步驟如下:VBA:查找新創建的HTML元素
- 加載網頁。
- 在2個可編輯文本字段中輸入開始日期和結束日期。
- 按下「提交」按鈕。 頁面然後運行一些JavaScript並將表格加載到先前存在的容器中。在這個容器裏面是表格以及帶有用於下一頁,導出,刷新等的按鈕的菜單欄。
- 等待5秒讓javascript執行並顯示錶格。
- 單擊此容器內的導出按鈕以下載所列數據的Excel文件。
,代碼:
Sub GetReport()
Dim frm As Variant
Dim TxtRng As Range
'Load IE page
Set IE = New InternetExplorerMedium
IE.Visible = True
IE.Navigate "http://example.com/page"
'Wait until page is ready
Do Until IE.ReadyState = 4
Loop
'Enter data into fields, press submit
IE.Document.getElementsByName("userField1").Item(0).Value = Date
IE.Document.getElementsByName("userField2").Item(0).Value = Date
IE.Document.getElementsByName("submitButton").Item(0).Click
'Wait for table to load, find export button
Application.Wait (Now + TimeValue("00:00:05"))
Set frm = IE.Document.getElementByID("exportButton")
'Testing to see if frm was successfully grabbed
Set TxtRng = ActiveWorkbook.Sheets("Sheet2").Range("A1")
TxtRng.Value = frm.getAttribute("innerHTML")
End Sub
我實現步驟1-4,但試圖找到出口按鈕的HTML元素的時候,我收到一個錯誤:
Run-time error '01': Object variable or With block variable not set
我已經做了一些故障排除,發現:
- 當您搜索時發生同樣的錯誤h表示不存在的項目。
- 在執行「submit」按鈕的javascript函數之前,所有不存在的元素都會出現同樣的錯誤。
- 搜索在執行「提交」按鈕的javascript函數之前存在的項目時,不會發生該錯誤。
- 使用getElementsbyName會產生相同的結果。
- 我等待了足夠長的時間才能加載表格。等待10,15,20 +秒不會改變結果。
因此,它看起來像getElementbyID和getElementsbyName找不到新創建的元素。沒有元素被標記,所以我不能使用getElementsbyTagName ...我是否需要以某種方式「刷新」InternetExplorerMedium對象,以便它可以檢測對頁面所做的更改?我看過對象引用,並沒有看到這些行中的任何內容。在頁面加載新元素時,ReadyState是否改變?
謝謝你的幫助。
很難在沒有看到頁面的情況下提示任何內容,或者至少與您試圖獲取的元素相關的HTML。 –