使用VBA Automation关闭JavaScript警报

Close JavaScript Alert Using VBA Automation

本文关键字:JavaScript 警报 关闭 Automation VBA 使用      更新时间:2023-09-26

我正在寻找一种方法来关闭加载网页时加载的Javascript弹出窗口/消息框(即不是NEW IE窗口,而是脚本化的alert())。

我目前有一段代码,可以将数据加载到搜索表单中,运行搜索,从结果中检索所需信息,退出搜索,然后继续列表中的下一项。在某些情况下,搜索结果中缺少一条关键信息。当这种情况发生时,页面上的JavaScript会在页面加载时弹出消息,让用户知道信息丢失。对于自动化,代码在继续之前会暂停(等待)清除框,并且用户必须单击"确定"按钮才能执行此操作。

(我没有办法直接更改页面的源脚本,因为这超出了我在工作中的职责范围。此外,保留此功能以供一般使用更为重要;它实际上只会对我正在创建的这个小使用功能有益。)

虽然我无法更改源脚本,但我找到了一个示例,说明如何通过更改加载的脚本来防止弹出/警报显示。然而,它涉及到一个已经加载的页面,对我来说并不真正有效(据我所知)。

IE.Document.getElementById("clearRelItems").removeAttribute "onClick"
IE.Document.getElementById("clearRelItems").setAttribute "onClick", "return true;"

是否可以使用此方法在页面完全加载之前进行更改?也就是说,这可以用来以某种方式绕过/规避页面加载时的函数调用吗?

我知道sendkeys,但如果可能的话,我更愿意避免这个选项(如果没有其他选择,我可能会使用这个选项)。此功能由用户启动,然后在后台运行,因为它需要一些时间才能完成。

我已经考虑过按照@Kyle的建议获取XML,但我认为我还不够熟练,无法使这种方法发挥作用。

否则我该如何避开警报?有没有办法真正激活警报上的OK按钮?页面的警报/加载是否可以通过其他方式绕过?

一个解决方案是识别脚本何时被卡住,然后只需发送击键"enter"即可关闭弹出窗口。

您是否了解过使用MS XML类直接发布数据并解析结果?这比IE自动化要快得多,尽管诚然并不总是可行的

编辑:不是真的,我们只是使用类来处理请求和响应,我们实际上并没有使用XML,我之前为某人整理了这个,给你一个想法:

Sub GetDataXML()
Dim strPostText As String, strResponse As String
Dim Pressure As Double, Temperature As Double
Dim XMLrequest As Object
Pressure = CDbl(InputBox("Enter the Pressure"))
Temperature = CDbl(InputBox("Enter the Temperature"))
strPostText = "lang=english&calc=standard&druck=" & Pressure & "&druckunit=1&temperatur=" & Temperature & "&tempunit=1&Submit=Calculate"
Set XMLrequest = CreateObject("MSXML2.XMLHTTP")
With XMLrequest
    .Open "POST", "http://www.peacesoftware.de/einigewerte/calc_co2.php5", False
    .setRequestHeader "Content-type", "application/x-www-form-urlencoded"
    .send (strPostText)
    Do: DoEvents: Loop Until .readyState = 4
    strResponse = .responseText
    .abort
End With
Debug.Print strResponse
End Sub

如果您在excel中使用查询表,则会更容易,因为它可以处理任何数据解析。

以上对你有帮助吗?