Python / Selenium:WebDriverException:消息:u'a为空

0 投票
2 回答
1382 浏览
提问于 2025-04-18 15:52

我正在运行几千行Python代码,这些代码使用Selenium来进行网页解析。我刚开始使用driver.refresh()这个方法,它会弹出一个“警告”消息,用户可以选择接受或拒绝。我用以下代码来接受这个警告:

driver.refresh()
time.sleep(1)
#refresh loads alert; switch focus to that alert
alert = driver.switch_to_alert()
alert.accept()

但是,alert.accept()这一行(在长代码中的第913行)出现了以下错误信息:

Traceback (most recent call last):
  File "2.7.4__next__page__test.py", line 44, in __call__
    return self._func(*args)
  File "2.7.4__next__page__test.py", line 1202, in startapi
    loggingvariableprovided)
  File "2.7.4__next__page__test.py", line 913, in query_literature_online_master_function
    alert.accept()
  File "c:\python27\lib\site-packages\selenium-2.37.2-py2.7.egg\selenium\webdriver\common\alert.py", line 54, in accept
    self.driver.execute(Command.ACCEPT_ALERT)
  File "c:\python27\lib\site-packages\selenium-2.37.2-py2.7.egg\selenium\webdriver\remote\webdriver.py", line 164, in execute
    self.error_handler.check_response(response)
  File "c:\python27\lib\site-packages\selenium-2.37.2-py2.7.egg\selenium\webdriver\remote\errorhandler.py", line 164, in check_response
    raise exception_class(message, screen, stacktrace)
WebDriverException: Message: u'a is null' ; Stacktrace: 
    at fxdriver.modals.findButton_ (file:///c:/users/douglas/appdata/local/temp/tmpco7fll/extensions/fxdriver@googlecode.com/components/driver_component.js:8443)
    at fxdriver.modals.acceptAlert (file:///c:/users/douglas/appdata/local/temp/tmpco7fll/extensions/fxdriver@googlecode.com/components/driver_component.js:8414)
    at FirefoxDriver.prototype.acceptAlert (file:///c:/users/douglas/appdata/local/temp/tmpco7fll/extensions/fxdriver@googlecode.com/components/driver_component.js:9111)
    at DelayedCommand.prototype.executeInternal_/h (file:///c:/users/douglas/appdata/local/temp/tmpco7fll/extensions/fxdriver@googlecode.com/components/command_processor.js:10851)
    at fxdriver.Timer.prototype.setTimeout/<.notify (file:///c:/users/douglas/appdata/local/temp/tmpco7fll/extensions/fxdriver@googlecode.com/components/command_processor.js:396) 

我在使用Windows 8.1,Python 2.7,Selenium 2.37.2,以及Firefox 23 Portable。有没有人知道这个错误信息是什么意思,以及我该如何解决这个问题?我会很感激任何人提供的建议。

解决方案
@Jason的回复让我找到了以下代码,来自一个之前的SO回答,这个代码解决了我遇到的问题:

try:
    WebDriverWait(driver, 3).until(expected_conditions.alert_is_present(),
                                   'Timed out waiting for PA creation ' +
                                   'confirmation popup to appear.')

    alert = driver.switch_to_alert()
    alert.accept()
    print "alert accepted"
except TimeoutException:
    print "no alert"

2 个回答

0

试着改用“活动元素”,然后发送一个 {ENTER}。在 C# 中可以这样做:

driver.SwitchTo().ActiveElement();
System.Windows.Forms.SendKeys.SendWait(@"{ENTER}");
1

好吧,WebDriverException后面有个javascript错误信息,这说明问题出在浏览器那边。a可能是指那个弹出提示框。Selenium中的Alert类并不会进行任何检查,它只是把命令发送给浏览器。很可能是弹出提示框没有及时出现。你可以等久一点,或者捕捉到这个错误后再试一次,或者先检查一下提示框是否已经出现。

撰写回答