iframe,又叫浮動幀標記,是內嵌的網頁元素,可以將一個html文件嵌入到另一個html文件中顯示。
最典型的案例就是163郵箱登錄:http://mail.163.com/,被綠色覆蓋的部分即為iframe。
對iframe進行操作,需要用到一下種方法:
- switch_to_iframe() 切換到iframe上
- switch_to.frame() 切換到iframe上
- switch_to.default_content() 切換回原主頁面
1.確定要操作的元素是否在iframe上。
firebug給我們提供了一個很簡易的操作。
以“網易郵箱登錄為例”,打開網頁http://mail.163.com/,啟動firebug
隨便選中一個元素,若左上角顯示的是TopWindow,則該元素不在iframe上,如“郵箱賬號登錄”
若左上角現實的是iframe#XXX,則該元素在iframe上,操作該元素需要先切換到該iframe上,XXX為這個iframe的id。
2.切換
#定位到iframe iframe=driver.find_element_by_id("x-URS-iframe") #切換到iframe driver.switch_to_frame(iframe)
切換之后,就可以對iframe上的元素進行操作。
#登錄,自行填寫賬號密碼 driver.find_element_by_css_selector("input[name='email']").send_keys("XXX") driver.find_element_by_css_selector("input[name='password']").send_keys("XXX") time.sleep(3) driver.find_element_by_id("dologin").click()
如果不切換直接操作iframe上的元素,編譯器會報錯
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: input[name='email']
3.switch_to_iframe方法上的橫線
當我們調用switch_to_iframe時,編譯器會在方法上划一條線
說明,這個方法雖然能用,但是已經過時,不推薦用。查閱文檔可以發現,有一種方法將其替換
4.返回主頁面
我們切換到iframe上之后,就無法對iframe以外的元素進行操作,如果需要,我們需要退出iframe
#退出iframe driver.switch_to.default_content()
附源碼:

from selenium import webdriver import time driver=webdriver.Firefox() driver.get("http://mail.163.com/") time.sleep(3) #定位到iframe iframe=driver.find_element_by_id("x-URS-iframe") #切換到iframe driver.switch_to.frame(iframe) #登錄 driver.find_element_by_css_selector("input[name='email']").send_keys("xxx") driver.find_element_by_css_selector("input[name='password']").send_keys("xxx") time.sleep(3) driver.find_element_by_id("dologin").click() #退出iframe driver.switch_to.default_content()