2016-07-25 75 views
0

處理彈出式覆蓋後,其餘代碼不再有效。Selenium with Python - 彈出式覆蓋後切換到主要內容

from selenium import webdriver 
browser = webdriver.Firefox() 

browser.get('https://www.vapordna.com/login.asp') 

#handling popup 

browser.find_element_by_css_selector("div.age-verify-button.age-modal__btn.btn.btn-primary").click() 
browser.find_element_by_link_text("Yes").click() 

如果我不關閉彈出的代碼的其餘部分的作品,如果我這一點的作品後,要關閉代碼的彈出式無。

emailElem = browser.find_element_by_name("email") 
emailElem.send_keys("****@****.com") 
passwordElem = browser.find_element_by_name("password") 
passwordElem.send_keys("******") 
passwordElem.submit() 

我曾嘗試加入這一行,但它並沒有幫助,

browser.switchTo().defaultContent(); 

據我瞭解彈出是不是一個新的iframe或窗口,所以我不知道爲什麼會有在繼續與網頁互動時遇到任何問題。

我也嘗試一下在身上繼續

browser.find_element_by_tag_name("body").click() 
+0

你是什麼意思「不再可以與頁面交互?」 –

+0

當我嘗試填寫登錄表單時沒有任何反應。當我先運行代碼而沒有先關閉彈出窗口時,它會登錄。後來的頁面,所以我需要關閉它 – user99137

+0

我已經給出了答案嘗試一下,並讓我知道.. –

回答

0

看到你的網站後,我才注意到這既不是一個框架,也不是一個窗口,我只是一個形式,所以無需在這裏使用browser.switchTo().defaultContent();它實際上用於從任何幀切換到默認值,實際上,當您要在打開的彈出頁面上找到覆蓋所有頁面的這個按鈕時,它不會被全部加載到頁面上,所以您應該嘗試使用WebDriverWait等到此按鈕在頁面上可見。

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

browser = webdriver.Firefox() 
browser.get('https://www.vapordna.com/login.asp') 

wait = WebDriverWait(driver, 10) 

wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.age-verify-button.age-modal__btn.btn.btn-primary"))).click() 

現在點擊此協議按鈕後,您可以繼續進行登錄。

+0

謝謝,這不起作用遺憾。我的代碼成功關閉彈出窗口,它是下一個部分,我已經編輯了我的問題,使它更清晰一些。 – user99137