gpt4 book ai didi

internet-explorer - 具有VBA输入事件的Internet Explorer自动化

转载 作者:行者123 更新时间:2023-12-04 07:50:49 26 4
gpt4 key购买 nike

我试图使用Microsoft Access 2003中的自动化功能来控制Internet Explorer 9以使用数据库数据来完成表单。

输入会在浏览器中触发一个事件,该事件将验证数据并使“保存”按钮可见。如果我使用sendkeys,则会触发该事件;但是,我发现sendkeys非常不可靠。如果更改元素的值,然后使用.fireevent(“onchange”),则不会发生任何事情-甚至不会出现错误。

我的问题是,我该如何触发该事件。或者,如何找出正在运行的javascript。是否有IE的插件加载项的调试类型,它会告诉我触发了什么事件?如果是这样,我可以自己运行脚本吗?

我的代码如下。

    Set IE = CreateObject("internetexplorer.application")
IE.Visible = True
IE.Navigate "https://extranet.website.com/Planning/Edition/Periodic?language=en"

Do While IE.ReadyState <> 4 Or IE.Busy = True
DoEvents
Loop


'log in
If IE.Document.Title = "website- access" Then
IE.Document.getElementById("login_uid").Value = "username"
IE.Document.getElementById("login_pwd").Value = "password"
IE.Document.all("ButSubmit").Click
Do While IE.ReadyState <> 4 Or IE.Busy = True
DoEvents
Loop
End If

Do While Not RstAvailability.EOF
StartDate = RstAvailability!AvailDate
IE.Document.getElementById("periodStart").Value = Format(StartDate, "dd mmm yy")
IE.Document.getElementById("periodEnd").Value = Format(StartDate, "dd mmm yy")
Set LinkCollection = IE.Document.GetElementsByTagName("A")
For Each link In LinkCollection
If link.innertext = "Add" Then
link.Click
Exit For
End If
Next
Do While IE.ReadyState <> 4 Or IE.Busy = True
DoEvents
Loop


Set objRows = IE.Document.GetElementsByTagName("tr")
If RstAvailability!RoomType = "DTW" Then
n = 0
While n < objRows.Length
If Trim(objRows(n).Cells(0).innertext) = "Single Room" Then
For i = 1 To 7
'objRows(n).FireEvent ("onchange")
'objRows(n).Cells(i).GetElementsByTagName("input")(0).Focus
'SendKeys Format(RstAvailability!roomcount - RstAvailability!RoomsSold, "0") & "{TAB}"
objRows(n).Cells(i).GetElementsByTagName("input")(0).Value = Format(RstAvailability!roomcount - RstAvailability!RoomsSold, "0")
objRows(n).Cells(i).GetElementsByTagName("input")(0).fireevent ("onchange")
Do While IE.ReadyState <> 4 Or IE.Busy = True
DoEvents
Loop
Next i
End If
n = n + 1
Wend
End If

Set objButtons = IE.Document.getelementsbyname("savePlanning")
objButtons(0).Click

Do While IE.ReadyState <> 4 Or IE.Busy = True
DoEvents
Loop

newtime = Now + TimeValue("0:00:10")
Do While True
If Now > newtime Then Exit Do
Loop

RstAvailability.MoveNext
Loop

输入字段的html是:
<tr class="first" roomId="30494" articleId="0" type="Availability" readonly="False">
<div>

<span class="roomName">

Single Room

</span>



</div>


<span class="data">
<input id="Availabilities" name="Availabilities" type="text" value="" />


</span>


<span class="data">
<input id="Availabilities" name="Availabilities" type="text" value="" />


</span>

谢谢!

最佳答案

经过几天的努力,答案实际上非常简单,但是几乎不可能在MSDN或网络上的任何其他文档中找到。

在更改输入字段的值之前,您需要设置焦点在该字段上。更改值后,需要将焦点设置到另一个字段。显然,这些事件使人们失去了焦点。因此,代码应如下所示:

        n = 0
While n < objRows.Length
If Trim(objRows(n).Cells(0).innertext) = "Family Room" Then
For i = 1 To 7
objRows(n).Cells(i).GetElementsByTagName("input")(0).Focus
objRows(n).Cells(i).GetElementsByTagName("input")(0).Value = Format(RstAvailability!roomcount - RstAvailability!RoomsSold, "0")
Next i
objRows(n).Cells(1).GetElementsByTagName("input")(0).Focus

End If
n = n + 1
Wend

我发现此问题的方法是查看一些有关IE9可访问性的MSDN文档。它建议为残疾人设置焦点。我只是想尝试一下就可以了。我希望这对其他人有帮助。

戴夫

关于internet-explorer - 具有VBA输入事件的Internet Explorer自动化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10191506/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com