Python / IE7 - 如何绕过警报框

时间:2013-01-21 18:56:40

标签: javascript python automation internet-explorer-7

我有自动化用Python编写的脚本用于IE7。除了触发警报框的情况外,它的工作正常。警报框在正文的onload中触发,这意味着它会在我的脚本到达之前执行。

我有以下作为我的等待功能,它只会挂起,直到单击警告框:

def _waitReady(self):
    """ Waits until IE finishes loading. """
    while self.oIE.Busy: time.sleep(0.1)
    while self.oIE.Document.readyState != "complete": time.sleep(0.1)

我想简单地禁用所有警报框,但似乎IE无法这样做。或者,我希望检测到警报框处于打开状态,然后简单地执行响应操作(例如只是单击它过去)。有没有关于如何实现这一目标的建议?

编辑: 我知道我可以循环浏览IE的子窗口,我知道如果能找到它,我可以关闭警报框。

win32gui.EnumChildWindows(hwnd, function, None) # cycles through child windows
win32api.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0) # closes window

现在我只需要一些方法将窗口识别为警告框。想法?

2 个答案:

答案 0 :(得分:1)

解决了我的问题。我最终只是遍历系统中的每个窗口,检查类名,并关闭窗口,如果它是一个警报类(#32770)。

我尝试采用更具针对性的方法,但我似乎找不到IE应用程序下的警报窗口。

def _waitReady(self):
while self.oIE.Busy:
    time.sleep(0.1)
    waitCount += 0.1

    if waitCount > 5:
        print("killing alert boxes")
        _killAllAlertBoxes()
       waitCount = 0

def _killAllAlertBoxes():
# iterates through all active windows
win32gui.EnumChildWindows(0, _closeWindow, None)

def _closeWindow(hwnd, lparam):
# if window is an alert box (class = '#32770')
if win32gui.GetClassName(hwnd) == '#32770':
    print("Closing Alert Box")
    win32api.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0) # closes window

感谢那些回复的人!

答案 1 :(得分:0)

此代码适用于firefox中的警报窗口,但您可能需要为IE修改它。

   import time

   time.sleep(2)
   driver.switch_to_alert().accept(); time.sleep(2); time.sleep(2); time.sleep(2);time.sleep(2)
   driver.switch_to_window(browser.window_handles[1])