如何在Python中使用Selenium关闭浏览器弹出窗口?

Abr*_*ham 5 python selenium

我正在尝试使用 Python 和 Selenium 自动下载。在起始页中,页面上会出现一个弹窗:

在此输入图像描述

如何使用 Selenium 关闭它?

我尝试了以下方法但都失败了:

>>> alert = browser.switch_to_alert()

>>> alert.accept()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/selenium/webdriver/common/alert.py", line 80, in accept
    self.driver.execute(Command.ACCEPT_ALERT)
  File "/usr/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 201, in execute
    self.error_handler.check_response(response)
  File "/usr/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 181, in check_response
    raise exception_class(message, screen, stacktrace)
NoAlertPresentException: Message: no alert open
  (Session info: chrome=59.0.3071.115)
  (Driver info: chromedriver=2.30.477691 (6ee44a7247c639c0703f291d320bdf05c1531b57),platform=Linux 4.4.0-57-generic x86_64)

>>> alert.dismiss()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/selenium/webdriver/common/alert.py", line 71, in dismiss
    self.driver.execute(Command.DISMISS_ALERT)
  File "/usr/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 201, in execute
    self.error_handler.check_response(response)
  File "/usr/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 181, in check_response
    raise exception_class(message, screen, stacktrace)
NoAlertPresentException: Message: no alert open
  (Session info: chrome=59.0.3071.115)
  (Driver info: chromedriver=2.30.477691 (6ee44a7247c639c0703f291d320bdf05c1531b57),platform=Linux 4.4.0-57-generic x86_64)


>>>alert = browser.switch_to_window('Open xdg-open?')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 531, in switch_to_window
    self._switch_to.window(window_name)
  File "/usr/lib/python2.7/dist-packages/selenium/webdriver/remote/switch_to.py", line 92, in window
    self._driver.execute(Command.SWITCH_TO_WINDOW, data)
  File "/usr/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 201, in execute
    self.error_handler.check_response(response)
  File "/usr/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 181, in check_response
    raise exception_class(message, screen, stacktrace)
NoSuchWindowException: Message: no such window
  (Session info: chrome=59.0.3071.115)
  (Driver info: chromedriver=2.30.477691 (6ee44a7247c639c0703f291d320bdf05c1531b57),platform=Linux 4.4.0-57-generic x86_64)


>>> alert = browser.switch_to.window("Open xdg-open?")
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/selenium/webdriver/remote/switch_to.py", line 92, in window
    self._driver.execute(Command.SWITCH_TO_WINDOW, data)
  File "/usr/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 201, in execute
    self.error_handler.check_response(response)
  File "/usr/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 181, in check_response
    raise exception_class(message, screen, stacktrace)
NoSuchWindowException: Message: no such window
  (Session info: chrome=59.0.3071.115)
  (Driver info: chromedriver=2.30.477691 (6ee44a7247c639c0703f291d320bdf05c1531b57),platform=Linux 4.4.0-57-generic x86_64)
Run Code Online (Sandbox Code Playgroud)

Ray*_*ama -1

您应该首先尝试此操作,看看是否是与等待相关的错误。
即:如果您的浏览器在执行操作之前没有足够的时间找到警报对话框。您可以了解有关显式等待的更多信息。这里

您还需要Expected_conditions包并尝试以下操作:

# add these imports
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

#try to find the alert and do stuff
try:
    #wait for the alert to show up
    WebDriverWait(browser, 3).until(EC.alert_is_present(),
                               'Timed out waiting for PA creation ' +
                               'confirmation popup to appear.')
    #if it does
    alert = browser.switch_to.alert()
    alert.accept()
    print "alert accepted"
except TimeoutException:
    print "no alert"
Run Code Online (Sandbox Code Playgroud)

注意,我精确地等待3秒,你可以将其更改为你喜欢的任何时间。

如果此解决方案不起作用,您应该尝试一种技巧来按名称或文本等显式选择对话框弹出窗口。