关闭Python中的Firefox WebDriver时出现意外警报

1 投票
1 回答
771 浏览
提问于 2025-04-18 09:54

我有一个简单的Python脚本,用来通过Selenium这个工具登录一个网站。问题是,当我尝试关闭这个工具的时候,Firefox浏览器会弹出一个意外的警告框。以下是我的脚本:

from selenium import webdriver
from time import *

class ClassTest(object):
    def __init__(self):
        self.driver = webdriver.Firefox()
        self.driver.get('url')


    def login(self, username, password): 
        self.driver.find_element_by_name("username").clear()
        self.driver.find_element_by_name("username").send_keys(username)
        self.driver.find_element_by_name("password").clear()
        self.driver.find_element_by_name("password").send_keys(password)
        self.driver.find_element_by_name("submit").click()

    def logout():
        self.driver.find_element_by_name('logout').click()        

    def __del__(self):
        self.logout()
        self.driver.close()
        self.driver.quit()

if __name__ == "__main__":
    test = ClassTest()
    test.login('myUsername', 'myPasswd')

我尝试了两种关闭工具窗口的方法;第一种是直接用 self.driver.close(),第二种是在 self.driver.close() 后面再用 self.driver.quit()。这两种方法的结果都是一样的。下面是错误信息的详细内容:

Message: u'Modal dialog present' ; Stacktrace: 
    at nsCommandProcessor.prototype.execute (file:///c:/users/user/appdata/local/temp/tmpeqmito/extensions/fxdriver@googlecode.com/components/command_processor.js:10949)
    at Dispatcher.executeAs/< (file:///c:/users/user/appdata/local/temp/tmpeqmito/extensions/fxdriver@googlecode.com/components/driver_component.js:7717)
    at Resource.prototype.handle (file:///c:/users/user/appdata/local/temp/tmpeqmito/extensions/fxdriver@googlecode.com/components/driver_component.js:7864)
    at Dispatcher.prototype.dispatch (file:///c:/users/user/appdata/local/temp/tmpeqmito/extensions/fxdriver@googlecode.com/components/driver_component.js:7811)
    at WebDriverServer/<.handle (file:///c:/users/user/appdata/local/temp/tmpeqmito/extensions/fxdriver@googlecode.com/components/driver_component.js:10740)
    at <anonymous> (file:///c:/users/user/appdata/local/temp/tmpeqmito/extensions/fxdriver@googlecode.com/components/httpd.js:1935)
    at ServerHandler.prototype.handleResponse (file:///c:/users/user/appdata/local/temp/tmpeqmito/extensions/fxdriver@googlecode.com/components/httpd.js:2261)
    at Connection.prototype.process (file:///c:/users/user/appdata/local/temp/tmpeqmito/extensions/fxdriver@googlecode.com/components/httpd.js:1168)
    at RequestReader.prototype._handleResponse (file:///c:/users/user/appdata/local/temp/tmpeqmito/extensions/fxdriver@googlecode.com/components/httpd.js:1616)
    at RequestReader.prototype._processBody (file:///c:/users/user/appdata/local/temp/tmpeqmito/extensions/fxdriver@googlecode.com/components/httpd.js:1464)
    at RequestReader.prototype.onInputStreamReady (file:///c:/users/user/appdata/local/temp/tmpeqmito/extensions/fxdriver@googlecode.com/components/httpd.js:1333) 

这是弹出的警告框:

在这里输入图片描述

有没有人知道这是为什么呢???

补充说明 1:

我找到了一些解决办法,发现每当我没有从网站登出的时候,就不会出现这个警告。可能是登出按钮或者它背后的处理过程出了问题。它的HTML代码是:

<img src="/images/button/exit.png" class="gwt-Image" name="logout" title="Log Off">

1 个回答

1

我觉得当一个AJAX请求被中断时,会显示对话框。我通常在Chrome和Firefox浏览器中看到这个情况。

这里有几个建议。

在注销后加一个短暂的暂停。我认为在注销的过程中可能还有AJAX在运行,使用一个短暂的暂停可以让AJAX请求完成。

import time

self.logout()
time.sleep(5)
self.driver.close()
self.driver.quit()

alert.accept()放在一个try-except块里:

self.logout()
try:
    alert = self.driver.switch_to_alert()
    alert.accept()
    print "alert accepted"
except TimeoutException:
    print "no alert"
self.driver.close()
self.driver.quit()

撰写回答