2015-06-20 305 views
1

我對此很陌生,但我正在練習,在我看來,登錄我研究所的網站應該是世界上最簡單的事情。對?呃,這讓我瘋狂。使用VBA控制IE登錄網站

具體來說,該計劃未能在 page.Document.getElementById("edit-name").Value = 1234

運行時錯誤424

而且「所需的對象」,我不知道這是相關的,當我輸入「頁」。 VBA編輯器有助於提供選項列表,並選擇「文檔」。當我輸入第二個「。」得到「page.Document」。我不會再獲得進一步的選項列表。

下面是完整的程序,並感謝所有幫助

Public Sub MyLogin() 

'This uses early binding 
'In menu at top of page - Tools...Reference.... Microsoft Internet Controls and Microsoft HTML Object Library must both be ticked 



Dim page As InternetExplorer 
Set page = New InternetExplorer 
page.Visible = True 

Dim MyLink As Object 

'Login at Institute website 
page.Navigate "http://www.actuaries.org.uk/" 


Do While page.Busy Or page.ReadyState <> 4 
    DoEvents 
Loop 



For Each MyLink In page.Document.Links 
    If InStr(MyLink.href, "/user") Then MyLink.Click: Exit For 
Next MyLink 

Do While page.Busy Or page.ReadyState <> 4 
    DoEvents 
Loop 

'Are now at the login page 
'Enter username, password and click 


    page.Document.getElementById("edit-name").Value = 1234 
    page.Document.getElementById("edit-pass").Value = "01/01/1977" 
    page.Document.getElementById("edit-submit").Click 




    End Sub 
+1

很難做出建議沒有得到有關HTML源。如果我不得不猜測,我會說沒有id爲「edit-name」的元素。 –

+0

分享網頁的源HTML。 「edit-name」元素不存在或不是「輸入」標籤。問題可能還在於該頁面尚未完全加載。嘗試調試代碼(在錯誤的行上放置一個斷點)並查看它是否有效。 –

回答

0

具體來說,在方案失敗page.Document.getElementById( 「編輯名」)。值= 1234

該行沒有錯。

我能想到的一個原因是您的For循環未執行。爲避免這種情況,請直接導航至相關url。這個修剪版本適合我。

enter image description here

Sub Sample() 
    Dim sUrl As String: sUrl = "https://www.actuaries.org.uk/user" 
    Dim ie As Object 

    Set ie = CreateObject("InternetExplorer.Application") 
    ie.Visible = True 

    ie.navigate sUrl 

    Do While ie.readystate <> 4: DoEvents: Loop 

    ie.Document.getElementById("edit-name").Value = 1234 
End Sub 
+0

非常感謝。事實上,直接導航到登錄頁面確實有效。 (我改變了我的代碼以切斷點擊鏈接的步驟。)但是,我真的不明白爲什麼點擊鏈接的想法不起作用。它肯定會提供正確的頁面 - 我可以看到,因爲瀏覽器是可見的。我也可以'檢查'頁面上的'edit-name'元素。這一切都完全打開。 – Stumped

+0

我剛剛嘗試過你的原始代碼,它的工作原理很好:) –

+0

不是這樣! – Stumped