2012-02-28 103 views
2

我正在寻找一种方式来关闭Javascript弹出/消息框(即不是新的IE窗口,但是一个脚本警报()),加载网页时加载。关闭JavaScript警报使用VBA自动化

我目前有代码将数据加载到搜索表单中,运行搜索,从结果中检索所需信息,退出搜索,然后继续执行列表中的下一项。在某些情况下,搜索结果中缺少一些重要信息。发生这种情况时,页面上的JavaScript会在页面加载时弹出消息,让用户知道信息丢失。通过自动化,代码在继续之前暂停(等待)该框清除,并且用户在此之前必须点击OK按钮。 (我无法直接更改页面的源脚本,因为这超出了我在工作中的责任范围,另外,保留此功能对于一般用途来说更为重要;它只能用于有利于我创建这个小使用功能。)

尽管我无法更改源脚本,但我发现example关于如何通过更改加载的脚本来防止显示弹出/警报。然而,它涉及到一个已经加载的页面,并不真正为我工作(据我所知)。

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

是否有可能使用这种方法来做出改变前的页面完全加载?即,这可以用来以某种方式在页面加载时绕过/绕过函数调用?

我知道关于sendkeys,但我宁愿尽可能避免这个选项(如果没有其他选择,我可能会最终使用此选项)。该功能旨在由用户发起,然后在后台运行,因为它需要一些时间才能完成。

我已经考虑过抓住@Kyle建议的XML,但我不相信我足够熟练地使这种方法起作用。

我还能如何解决警报?有没有办法实际激活警报上的确定按钮?可以通过其他方式绕过警告/加载页面吗?

+0

这是一个Javascript的通知();消息框?或者一个html元素? – Cilvic 2012-02-28 20:47:42

+0

这是一个alert()框。 – Gaffi 2012-02-28 20:48:38

回答

2

一个解决方案可以识别您的脚本何时卡住,然后发送按键“enter”关闭弹出窗口。

+0

我知道sendkeys,但是这是由用户发起的,然后在后台运行,因为它需要一些时间才能完成。如果没有其他选择,我可能会最终使用此选项。(将此信息添加到原始问题) – Gaffi 2012-02-28 20:51:08

+0

我仍然不愿意,但是我将不得不使用此选项。谢谢! – Gaffi 2012-03-02 01:18:46

+0

SendKeys无法在我的情况下成功关闭JavaScript confirm()弹出窗口。在SendKeys之前添加Application.Wait也不起作用。任何人都有这个问题? – 10basetom 2012-10-23 10:26:56

1

你有没有看过使用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中使用查询表作为该处理数据的任何解析更容易。

以上帮助你吗?

+0

我已经成功地获得了你的榜样,@凯尔。然而,还有一些其他的东西进入POST命令,我错过了(这是基于我完全缺乏知识的假设)。我无法确定通过了哪些变量,也无法修补我的未知数,因为每当我在原始页面范围外进行操作时,脚本会将我指向登录页面。 Debug.Print输出我习惯的标准登录屏幕的代码。我如何能够查看这些变量?每个INPUT/OPTION标签是否有一个? (如果是这样,有相当多的工作。) – Gaffi 2012-03-01 19:46:06

+0

这种方法并不总是可能的。获取POST变量的最简单方法是使用开发工具中的浏览器,您使用哪种浏览器? – SWa 2012-03-02 09:08:12

+0

这是为了工作,我唯一的选择是IE 7. – Gaffi 2012-03-02 11:08:54