如何通过excel vba在网站输入中输入值
我试图在网站过滤器中输入一个值,我可以使用HTML元素ID在登录页面中输入用户名和密码,登录后我想在过滤器输入中输入一个值,过滤器输入ID为units grid search filter,但它会自动更改为units-grid-search-filter, 我不认为问题在于元素id空间或延迟如何通过excel vba在网站输入中输入值,excel,vba,internet-explorer,Excel,Vba,Internet Explorer,我试图在网站过滤器中输入一个值,我可以使用HTML元素ID在登录页面中输入用户名和密码,登录后我想在过滤器输入中输入一个值,过滤器输入ID为units grid search filter,但它会自动更改为units-grid-search-filter, 我不认为问题在于元素id空间或延迟 这是我的密码 Sub Button3_Click() On Error GoTo Err_Clear sURL = "http://103.215.211.2/Web/Account/Login?Re
这是我的密码
Sub Button3_Click()
On Error GoTo Err_Clear
sURL = "http://103.215.211.2/Web/Account/Login?ReturnUrl=%2fWeb%2f#25/-3/"
Set oBrowser = New InternetExplorer
oBrowser.Silent = True
oBrowser.timeout = 60
oBrowser.Navigate sURL
oBrowser.Visible = True
Do
' Wait till the Browser is loaded
Loop Until oBrowser.readyState = READYSTATE_COMPLETE
Set HTMLdoc = oBrowser.Document
HTMLdoc.all.UserName.Value = "abc"
HTMLdoc.all.Password.Value = "abc123"
HTMLdoc.all.units -grid - Search - Filter.Value = "123"
For Each oHTML_Element In HTMLdoc.getElementsByTagName("input")
Debug.Print oHTML_Element.Name
Next
Set frm = HTMLdoc.forms(0)
frm.submit
Set IE = CreateObject("InternetExplorer.Application")
' oBrowser.Refresh ' Refresh If Needed
Do Until Not IE.Busy And IE.readyState = 4
DoEvents
Loop
e.Click
Err_Clear:
If Err <> 0 Then
Err.Clear
Resume Next
End If
End Sub
子按钮3\u单击()
错误时转到错误清除
苏尔=”http://103.215.211.2/Web/Account/Login?ReturnUrl=%2fWeb%2f#25/-3/"
Set oBrowser=新的InternetExplorer
oBrowser.Silent=True
oBrowser.timeout=60
船首导航
oBrowser.Visible=True
做
'等待浏览器加载
循环直到oBrowser.readyState=readyState\u完成
设置HTMLdoc=oBrowser.Document
HTMLdoc.all.UserName.Value=“abc”
HTMLdoc.all.Password.Value=“abc123”
HTMLdoc.all.units-grid-Search-Filter.Value=“123”
对于HTMLdoc.getElementsByTagName(“输入”)中的每个oHTML_元素
Debug.Print oHTML_Element.Name
下一个
设置frm=HTMLdoc.forms(0)
提交
设置IE=CreateObject(“InternetExplorer.Application”)
“oBrowser.Refresh”根据需要刷新
直到IE.Busy和IE.readyState=4为止
多芬特
环
e、 点击
错误清除:
如果错误为0,则
呃,明白了
下一步继续
如果结束
端接头
您尝试自动化的站点正在使用knockoutjs 在knockoutjs代码中,您试图使用VBA代码设置值的文本框被设置为可观察的 如果此参数是一个可观察的值,则绑定将更新 每当值更改时,元素的值。如果参数不是 可以观察到,它只会设置元素的值一次,不会 稍后再更新 每当用户编辑关联表单控件中的值时 将更新视图模型上的属性。KO将始终尝试 当值已修改且用户 将焦点转移到另一个DOM节点(即,在更改事件上),但 您还可以使用 valueUpdate参数如下所述 参考: 这意味着该值来自knockoutjs模型。如果手动修改该值,则它还将修改模型中的值 当您尝试使用VBA代码分配值时,不会发生任何事件,并且值不会更新到该模型 我试图从VBA代码触发事件。但它并没有修改模型中的值。我用多个JS事件进行了测试,但都不起作用。如果您试图从HTML代码中传递相同的事件,那么它将在VBA中给出一个错误 最后,我建议您使用Sendkeys进行测试 Sendkeys本质上与使用键盘打字相同。在继续之前,您需要确保选择了正确的窗口和对象。Sendkeys还可以触发基于web上的用户交互运行的事件 示例代码:
Declare PtrSafe Function SetForegroundWindow Lib "user32" (ByVal HWND As Long) As Long
Sub demo()
Dim i As Long
Dim URL As String
Dim IE As Object
Dim HWNDSrc As Long
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
URL = "example.com"
IE.Navigate URL
Do While IE.ReadyState = 4: DoEvents: Loop
Do Until IE.ReadyState = 4: DoEvents: Loop
HWNDSrc = IE.HWND
SetForegroundWindow HWNDSrc
IE.Document.getElementById("abc").Focus
SendKeys "123", True
Set IE = Nothing
End Sub
此外,您可以尝试根据自己的要求修改代码。我不清楚问题出在哪里。你是说id会改变为有空格吗?您可以尝试以下ie.document.querySelector(“输入[id*=search]”。value=“xyz”或ie.document.querySelector(“单位网格搜索过滤器,[id='units-grid-search-filter']”)。value=“xyz”如果其中一项工作我将键入答案。虽然从您展示的内容来看,您应该只能够使用ie.document.querySelector(“单位网格搜索过滤器”).value=“xyz”,但您可能还需要将一个键关闭事件与字段条目相关联。该网站似乎正在使用knockoutjs。请尝试提供详细信息,如它要求的对象是什么?请尝试检查是否将“IE”用作InternetExplorer对象。如果您使用的是任何其他名称,则需要在代码中对其进行修改。让我们知道测试结果。