Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过excel vba在网站输入中输入值_Excel_Vba_Internet Explorer - Fatal编程技术网

如何通过excel vba在网站输入中输入值

如何通过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

我试图在网站过滤器中输入一个值,我可以使用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?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对象。如果您使用的是任何其他名称,则需要在代码中对其进行修改。让我们知道测试结果。