email郵件中 內嵌iframe_第二章(第7節):多視窗或多iframe切換
阿新 • • 發佈:2021-01-30
技術標籤:email郵件中 內嵌iframe
在頁面操作過程中有時候點選某個連結會彈出新的視窗或標籤頁,這時就需要主機切換到新開啟的視窗或標籤頁上進行操作,我們使用的 WebDriver 對視窗或標籤頁的切換使用的函式是一樣的,故在本節學習中,為了方便描述,我們統一使用視窗。
在 Web 應用中經常會遇到 frame/iframe 表單巢狀頁面的應用,WebDriver 只能在一個頁面上對元素識別與定位,對於 frame/iframe 表單內嵌頁面上的元素無法直接定位。這時就需要通過 switch_to.frame() 方法將當前定位的主體切換為 frame/iframe 表單的內嵌頁面中。
多視窗之間切換
WebDriver 提供了 switch_to.window() 方法,可以實現在不同的視窗之間切換。以百度首頁和百度註冊頁為例,在兩個標籤頁之間的切換程式碼如下。
from selenium import webdriver import time driver = webdriver.Chrome() driver.implicitly_wait(10) driver.get("http://www.baidu.com") # 獲得百度搜索視窗控制代碼 sreach_windows = driver.current_window_handle driver.find_element_by_link_text('登入').click() driver.find_element_by_link_text("立即註冊").click() # 獲得當前所有開啟的視窗的控制代碼 all_handles = driver.window_handles # 進入註冊視窗 for handle in all_handles: if handle != sreach_windows: driver.switch_to.window(handle) # 切換到下一個視窗 print('now register window!') driver.find_element_by_name("account").send_keys('username') driver.find_element_by_name('password').send_keys('password') time.sleep(2) # …… driver.quit()
多 iframe 切換
我們以 126 郵箱登入框頁面為例,該頁面中有一個子頁面 iframe,我們下面列出該頁面的部分程式碼。
<html>
<body>
...
<iframe id="x-URS-iframe" ...>
<html>
<body>
...
<input name="email" >
想要操作登入框必須要先切換到 iframe 表單才能找到的該元素,然後才能去操作。
from selenium import webdriver driver = webdriver.Chrome() driver.get("http://www.126.com") driver.switch_to.frame('x-URS-iframe') # 跳進該 iframe 頁面 driver.find_element_by_name("email").clear() driver.find_element_by_name("email").send_keys("username") driver.find_element_by_name("password").clear() driver.find_element_by_name("password").send_keys("password") driver.find_element_by_id("dologin").click() driver.switch_to.default_content() # 跳回最外層的頁面 driver.quit()
switch_to.frame() 預設可以直接取表單的 id 或 name 屬性,如果 iframe 沒有可用的 id 和 name 屬性,則可以先定位到該 iframe 元素,直接把該元素本身傳入給 switch_to.frame() 函式。
# 先通過 xpth 定位到 iframe,當然你可以根據前面學的任何定位方法來定位
xf = driver.find_element_by_xpath('//*[@id="x-URS-iframe"]')
# 再將定位元素傳給 switch_to.frame() 方法
driver.switch_to.frame(xf)
閱讀原文:
多視窗或多iframe切換www.birdpython.com