1、web窗口之iframe窗口切換html
首先,iframe是html裏面的html頁面。python
若遇到要操做的元素,在iframed當中,則須要進行此操做。web
操做步驟:ui
1)判斷要操做的元素是否在iframe當前,可以使用元素定位方法進行判斷;spa
2)若1中判斷元素存在。則須要再判斷切換到那個iframe中。code
3)切換方法:htm
1 driver.switch_to.frame()
參數支持3種方式來肯定切換到哪一個一個iframe:blog
1 #1) iframe下標 從0開始 2 driver.switch_to.frame(3) 3 4 #2) iframe元素的name屬性 5 driver.switch_to.frame("login_frame_qq") 6 7 #3) iframe這個webElment元素。 8 9 driver.switch_to.frame(driver.find_element_by_xpath('//iframe[@name="login_frame_qq"]))
具體實現的流程:element
1)打開訪問的頁面;get
2)根據元素定位等操做,進入到有iframe的頁面;
3)操做到有iframe的頁面當中,且後面的操做,是在此iframe中找到元素並操做;
4)切換到iframe窗口,進入下一代html當中
driver.switch_to.frame("iframe窗口_名稱")
5)在firame窗口中定位元素操做;
6) 回到默認的html頁面當中 - 第一代
driver.switch_to.default_content()
7)回到上一級的iframe - 上一代
driver.switch_to.parent_frame()
示例:僅供參考
import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 一、打開訪問騰訊課堂 driver = webdriver.Chrome() driver.maximize_window() driver.get("https://ke.qq.com/") # 二、根據xpath定位當前頁面登陸按鈕,點擊登陸進入QQ登陸窗口 loc = (By.XPATH,'//a[@id="js_login"]') WebDriverWait(driver,10).until(EC.visibility_of_element_located(loc)) driver.find_element_by_xpath('//a[@id="js_login"]').click() # 三、強制等待1秒 time.sleep(1) # 四、在新的彈窗中找到QQ登陸按鈕,點擊進入QQ登陸帳號密碼輸入框 loc2 = (By.XPATH,'//i[@class="icon-font i-qq"]') WebDriverWait(driver,10).until(EC.visibility_of_element_located(loc2)) driver.find_element_by_xpath('//i[@class="icon-font i-qq"]').click() # 五、在QQ帳號登陸窗口 loc3 =(By.XPATH,'//iframe[@name="login_frame_qq"]') WebDriverWait(driver,10).until(EC.visibility_of_element_located(loc3)) driver.find_element_by_xpath('//iframe[@name="login_frame_qq"]').click() # 六、切換到新的iframe的窗口 driver.switch_to.frame("login_frame_qq") # 七、在QQ登陸窗口定位到QQ帳號信息 loc4 =(By.XPATH,'//*[@id="img_out_1xxxx"]') WebDriverWait(driver,20).until(EC.visibility_of_element_located(loc4)) driver.find_element_by_xpath('//*[@id="img_out_1xxxx"]').click() # 九、退出會話 time.sleep(10) driver.quit()
2、web窗口之Alert(彈窗)切換
不少時候咱們會遇到彈窗,且必須對彈窗操做後才能對頁面進行操做。彈窗的優先級比網頁中的任意元素高;
這裏就以這種類型的窗口進行操做。
步驟:
1)點擊觸發操做,觸發彈窗出現;
1 driver.find_element_by_id("press").click()
2)等待彈窗出現;
3)將操做切換到彈窗;
1 driver.switch_to.alert
4)將彈窗關掉,進行下一步的頁面處理操做
1 print(alert.text) 2 alert.accept
示例:
1 """ 2 alert類 3 """ 4 import time 5 6 from selenium import webdriver 7 8 driver = webdriver.Chrome() 9 driver.get("E:\Workspace\python\Web\class_05_0307\MyHtml.html") 10 11 # 點擊動做,觸發彈框出現 12 driver.find_element_by_id("press").click() 13 # 等待彈窗出現 14 time.sleep(1) 15 16 # 切換彈窗 17 alert = driver.switch_to.alert 18 19 # 將彈窗關掉,進行下一步的頁面處理 20 print(alert.text) 21 alert.accept() 22 23 # 關閉會話 24 time.sleep(5) 25 driver.quit()