您好StackOverflow社區,使用VBA瀏覽網頁/ maniuplate IE通過訪問
我有一個關於使用Access VBA操縱IE的問題。
本質上,我試圖編寫代碼,使用IE打開特定的網頁,搜索特定鏈接的頁面(目標鏈接的名稱將取決於用戶的情況),導航到新頁面通過編程方式點擊該鏈接,然後通過在生成的新頁面上查找特定的鏈接/元素來重複該過程。
爲最終目標的鏈接顯示的文字永遠是相同的,但它駐留在頁面將在每一個案件不同。
我的問題是與編程搜索第二級頁面駐留那裏的元素......我的成績不斷給我從第一級頁面僅元素,瀏覽器加載了新的鏈接後還是一樣。
道歉,如果我做了一個糟糕的工作描述問題的上下文到目前爲止。
我的代碼,本質上,如下:
Dim ie As Object, ieDoc As HTMLDocument
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
strHTML = "http://targetsite.com/first-level_page"
ie.navigate strHTML
'wait for browser
While ie.ReadyState <> READYSTATE_COMPLETE
DoEvents
Wend
'define first-level target link and search for it and then "click" it
Dim i As Integer
Dim txt As String, link As String, p As String
Set ieDoc = ie.Document
txt = "First-Level Target"
Do Until link = txt Or i >= 1000
i = i + 1
link = ieDoc.Links(i).outerText
Loop
'I know the above loop is not exactly ideal in its current form, but it does give me a working first attempt at the functionality I'm trying to build.
ieDoc.Links(i).Click
到目前爲止,一切都很好。上面的代碼正如預期的那樣工作。在所有情況下,它都能正確導航到所需的二級頁面。我要去哪裏錯了是,當我試圖尋找該二級頁面的最終目標元素:
'wait for browser
While ie.ReadyState <> READYSTATE_COMPLETE
DoEvents
Wend
'Search for final target element (which always has the same name and anchor text on all second-level pages)
ieDoc.getElementsByName("final-target-name").Item.Click
上面的線(基於.getElementsByName)如果我嘗試使用它的工作就好了第一級頁面。但是,一旦我導航到任何二級頁面,它什麼都不做。我也嘗試用上面的循環的修改版本替換它,該循環搜索第一級頁面上的鏈接。同樣的結果。
作爲一個故障排除步驟,我也更換爲debug.print命令簡單地命名所有的二級頁面元素的那條線,而這總是從第一頁返回元素名稱來代替。
我認爲很明顯,我不知何故未能正確更新或重新定義我的HTMLDocument我跟着第一個鏈接之後。我已經將ieDoc設置爲無,然後將其重新設置爲ie.document,但這也不起作用。
希望有一個簡單的命令或語法,我只是無知。但是對於我的生活,我沒有能夠讓VBA在單擊第一個鏈接後正確引用頁面上存在的HTML元素。
在此先感謝您的任何建議!
〜JQN
未經測試,我可能會建議您查看您的getElementsByName(「target」)是否獲取多個鏈接,其中第一個鏈接可能不是活動鏈接。而不是使用'.Item'訪問元素,添加一個索引並嘗試用'(1)'(它可以訪問第二個元素,即頁面的第二層)。 –
代碼放置在哪裏?我想它在二級頁面? –
導航事件之後,您仍然具有相同的'ieDoc'引用,該引用指向不再加載的頁面。在任何導航完成後,您需要刷新該引用'Set ieDoc = ie.Document'。 –