2015-06-20 314 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