selenium-iframe操作


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()
源碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM