2017-07-03 431 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秒,你可以把它改成任何你喜歡的。

如果此解決方案不起作用,你應該嘗試一招明確選擇按名稱或文字等的對話框彈出..

相關問題