2017-07-03 170 views
2

我试图使用Python和Selen自动化下载。在开始页面,弹出页面上出现:如何在python中使用Selenium关闭浏览器弹出窗口?

enter image description here

我怎样才能关闭它使用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) 
+0

如何切换到对话框中,点击“不要开”: driver.find_element_by_xpath('// div [contains(@class,“ui-dialog”)and @ aria-describedby =“dialogContent2”] // button [@ title =“Dont't open”]')。click( ) –

+0

您是否尝试过使用显式等待警报存在? –

+0

@RayhaneMama什么是显式等待?我如何做到这一点? – Abraham

回答

0

你应该首先尝试这一点是为了看它是否涉及到等待一个错误。
即:如果您的浏览器在执行操作之前没有足够的时间来查找警报对话框。您可以了解更多关于显式等待的信息。 here

,你还需要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" 

注意我一种高精度等待3秒,你可以把它改成任何你喜欢的。

如果此解决方案不起作用,你应该尝试一招明确选择按名称或文字等的对话框弹出..

相关问题