2016-10-26 5 views
1

Я пытаюсь использовать селен, чтобы перейти от некоторой страницы на другую:Как принять оповещение, которое вызвано «get» в селене (python, chromedriver)?

driver = webdriver.Chrome() 
driver.get("...some page...") 
... # the alert does not exist yet and thus cannot be accepted 
driver.get("...some other page...") # the alert pops up here and blocks navigation to 'some other page' 
# execution never reaches here 
... 

Теперь, перейдя от «какой-то страницы» вызывает тревогу, с просьбой подтвердить, что один действительно хочет покинуть страницу. Это блокирует выполнение навсегда. Неявный тайм-аут был установлен, но не вызван этим. Я не могу получить селен, чтобы принять предупреждение, потому что появляется только после вызова «get».

Есть ли способ обойти это?

спасибо!

+0

Почему вы не можете принять оповещение? Показывать код, как вы его принимаете – Andersson

+0

Я не могу принять предупреждение, потому что оно появляется только после вызова 'get'. Затем выполнение застревает. Поэтому я не могу принять предупреждение перед вызовом 'get', потому что он еще не существует, или после этого, потому что выполнение никогда не проходит мимо' get' –

+0

Однако вы можете принять это предупреждение. Итак, как вы пытаетесь его принять? Покажите нам пример кода, который вы используете – Andersson

ответ

1

Попробуйте следующий код и дайте мне знать, если это не работает

from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.common.exceptions import TimeoutException 

driver = webdriver.Chrome() 
driver.get("...some page...") 
try: 
    WebDriverWait(driver, 5).until(EC.alert_is_present()) 
    driver.switch_to_alert().accept() 
except TimeoutException: 
    print("Alert not found. Move on...) 
driver.get("...some other page...") 
+0

Спасибо за помощь! Это не решает проблему, потому что предупреждение не появляется до 'driver.get (« ... некоторая другая страница ... »)'. –

+0

поэтому используйте 'try/except' блок не после' driver.get ("... some page ...") ', но после' driver.get («... некоторая другая страница ...») ' – Andersson

+0

это тоже не сработает, потому что выполнение просто останавливается на 'driver.get (« ... некоторая другая страница »)' (похоже, оно заблокировано предупреждением) и поэтому не дойдет до блока 'try/except' –

0

Попробуйте overwriting функция javascriptalert.

driver.get('https://stackoverflow.com/questions/40259660/how-to-accept-alert-that-is-triggered-by-get-in-selenium-python-chromedriver#40259660') 
wmd_input = ref_settings.driver.find_element(By.ID, 'wmd-input') 
wmd_input.click() 
wmd_input.send_keys('That's a test for a model JS dialog') 

#the following line overwrites the alert function 
driver.execute_script("""window.alert = function() {};alert = function() {};""") 
time.sleep(3) 
ref_settings.driver.get('http://stackoverflow.com') 
Смежные вопросы