【问题标题】:Python / Selenium: WebDriverException: Message: u'a is null'python / selenium:webdriverexception:消息:u'a是null'
【发布时间】: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


    【解决方案1】:

    好吧,WebDriverException 最后带有 javascript 回溯意味着它来自浏览器端。 a 可能是对警报的引用。 selenium Alert 包装类不做任何检查,它只是向浏览器发送命令。可能警报没有很快出现。您可以等待更长时间,或者捕获异常并重试,或者先尝试检查警报是否出现。

    【讨论】:

    • 非常感谢——让我重回正轨!
    【解决方案2】:

    尝试切换到活动元素,然后发送 {ENTER} 它会在 C# 中像这样完成:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 2015-02-15
      • 2015-08-20
      • 1970-01-01
      相关资源
      最近更新 更多