【发布时间】:2014-09-26 11:23:40
【问题描述】:
我正在运行几千行调用 Selenium 进行 Web 解析的 Python 代码。我刚开始使用 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:
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 的回复让我从 previous SO answer 得到以下代码,这解决了我的问题:
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"
【问题讨论】:
标签: python firefox selenium webdriver web-scraping