Excel 正在填写web表单字段,但网页无法检测文本
我正在使用VBA填写web表单,我可以在输入框中填写文本,但网页仍然无法检测文本并显示错误: “错误:必填字段-请提供答案” 看起来有一些AngularJS在后台运行,它无法检测我的VBA中输入的文本。任何帮助都将不胜感激Excel 正在填写web表单字段,但网页无法检测文本,excel,vba,Excel,Vba,我正在使用VBA填写web表单,我可以在输入框中填写文本,但网页仍然无法检测文本并显示错误: “错误:必填字段-请提供答案” 看起来有一些AngularJS在后台运行,它无法检测我的VBA中输入的文本。任何帮助都将不胜感激 首先,在objIE.Navigate URL之后,您应该等待网站完全加载并且IE准备就绪。这是通过以下步骤完成的: objIE.Navigate URL 'this needs some time but VBA will continue excecuting the ne
首先,在
objIE.Navigate URL
之后,您应该等待网站完全加载并且IE准备就绪。这是通过以下步骤完成的:
objIE.Navigate URL 'this needs some time but VBA will continue excecuting the next statement qickly
Const READYSTATE_COMPLETE As Integer = 4
Do While objIE.Busy Or objIE.ReadyState <> READYSTATE_COMPLETE
DoEvents
Loop
'now IE is ready and the page is loaded.
这将尝试访问字段student.firstName
,如果该字段不存在,则会出错。我们使用下一步错误恢复时的来抑制错误消息,并跳回TryAgain
,直到找到它
请注意,这有一个缺点:如果加载此站点时出现问题,它将陷入此循环中。所以我建议获得一个定时取消标准,比如如果这需要一分钟以上的时间,取消它并抛出一条错误消息
类似于以下的方法应该可以工作:
Option Explicit
Sub test()
Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
Dim URL As String
URL = "https://npc.collegeboard.org/app/dartmouth/start"
objIE.Navigate URL
Const READYSTATE_COMPLETE As Integer = 4
Do While objIE.Busy Or objIE.ReadyState <> READYSTATE_COMPLETE
DoEvents
Loop
Dim Obj As Object
Do While Obj Is Nothing
On Error Resume Next
Set Obj = objIE.Document.getElementById("student.firstName")
On Error GoTo 0
Loop
objIE.Document.getElementById("student.firstName").Focus
objIE.Document.getElementById("student.firstName").Value = "Tom"
End Sub
选项显式
子测试()
模糊对象
Set objIE=CreateObject(“InternetExplorer.Application”)
objIE.Visible=True
将URL设置为字符串
URL=”https://npc.collegeboard.org/app/dartmouth/start"
导航URL
常量READYSTATE_完成为整数=4
在objIE.Busy或objIE.ReadyState ReadyState\u完成时执行此操作
多芬特
环
作为对象的Dim Obj
当Obj什么都不是的时候做
出错时继续下一步
Set Obj=objIE.Document.getElementById(“student.firstName”)
错误转到0
环
objIE.Document.getElementById(“student.firstName”).Focus
objIE.Document.getElementById(“student.firstName”).Value=“Tom”
端接头
首先,在objIE.Navigate URL
之后,您应该等待网站完全加载并且IE准备就绪。这是通过以下步骤完成的:
objIE.Navigate URL 'this needs some time but VBA will continue excecuting the next statement qickly
Const READYSTATE_COMPLETE As Integer = 4
Do While objIE.Busy Or objIE.ReadyState <> READYSTATE_COMPLETE
DoEvents
Loop
'now IE is ready and the page is loaded.
这将尝试访问字段student.firstName
,如果该字段不存在,则会出错。我们使用下一步错误恢复时的来抑制错误消息,并跳回TryAgain
,直到找到它
请注意,这有一个缺点:如果加载此站点时出现问题,它将陷入此循环中。所以我建议获得一个定时取消标准,比如如果这需要一分钟以上的时间,取消它并抛出一条错误消息
类似于以下的方法应该可以工作:
Option Explicit
Sub test()
Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
Dim URL As String
URL = "https://npc.collegeboard.org/app/dartmouth/start"
objIE.Navigate URL
Const READYSTATE_COMPLETE As Integer = 4
Do While objIE.Busy Or objIE.ReadyState <> READYSTATE_COMPLETE
DoEvents
Loop
Dim Obj As Object
Do While Obj Is Nothing
On Error Resume Next
Set Obj = objIE.Document.getElementById("student.firstName")
On Error GoTo 0
Loop
objIE.Document.getElementById("student.firstName").Focus
objIE.Document.getElementById("student.firstName").Value = "Tom"
End Sub
选项显式
子测试()
模糊对象
Set objIE=CreateObject(“InternetExplorer.Application”)
objIE.Visible=True
将URL设置为字符串
URL=”https://npc.collegeboard.org/app/dartmouth/start"
导航URL
常量READYSTATE_完成为整数=4
在objIE.Busy或objIE.ReadyState ReadyState\u完成时执行此操作
多芬特
环
作为对象的Dim Obj
当Obj什么都不是的时候做
出错时继续下一步
Set Obj=objIE.Document.getElementById(“student.firstName”)
错误转到0
环
objIE.Document.getElementById(“student.firstName”).Focus
objIE.Document.getElementById(“student.firstName”).Value=“Tom”
端接头
Thank@Pᴇʜ. 我已经在做这一切了(并没有包括这一点,以使其不那么冗长)-因此,在我开始填写表单之前,页面已完全加载。我的文本在文本框中填充,但我仍然在页面上看到错误。让我在图片中加入这个问题。@user1771840显然,该站点背后的JavaScript触发了一个keydown事件。您可以通过在将焦点设置到该输入框后发送一个键来欺骗它:在.focus
行之后添加Application.SendKeys”“
,在填充数据之前向该框发送一个空格。谢谢@Pᴇʜ. 我已经在做这一切了(并没有包括这一点,以使其不那么冗长)-因此,在我开始填写表单之前,页面已完全加载。我的文本在文本框中填充,但我仍然在页面上看到错误。让我在图片中加入这个问题。@user1771840显然,该站点背后的JavaScript触发了一个keydown事件。您可以通过在将焦点设置到该输入框后发送一个键来实现这一点:在.focus
行之后添加Application.SendKeys”“
,在向该框中填充数据之前发送一个空格。