Python / Selenium:WebDriverException:消息:u'a为空
我正在运行几千行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
类并不会进行任何检查,它只是把命令发送给浏览器。很可能是弹出提示框没有及时出现。你可以等久一点,或者捕捉到这个错误后再试一次,或者先检查一下提示框是否已经出现。