Selenium成長之路-24 frame(iframe)的處理

今天來了解一下 frame的標籤。
frame標籤有三種:frameset、iframe、frame;
>>>frameset就當做一個普通的標籤使用,
>>>而frame與iframe就有點特殊了。
所以接下來的時間,我們要針對frame和iframe進行詳細的操作。

frame 與 iframe的區別

  1. FrameIframe兩者可以實現的功能基本相同,不過Iframe比Frame具有更多的靈活性。
  2. frame是整個頁面的框架,iframe是內嵌的網頁元素,也可以說是內嵌的框架。
  3. Iframe 標記又叫浮動幀標記,可以用它將一個HTML文檔嵌入在一個HTML中顯示。
  4. IframeFrame標記的最大區別是在網頁中嵌入 的所包含的內容與整個頁面是一個整體,而< /Frame>所包含的內容是一個獨立的個體,是可以獨立顯示的。另外,應用Iframe還可以在同一個頁面中多次顯示同一內容,而不必重複這段內 容的代碼。

如何判斷元素是否在iframe上

這個很簡單,
1.打開Firefox瀏覽器
2.定位元素,切換到FirePath界面
3.查看Firebug工具左上角,如果顯示Top Window 說明沒有在iframe上
4.如果顯示 iframe# xxx 這樣,說明在iframe上,# 後面是它的id。

iframe如下圖:

在這裏插入圖片描述
Top Window 如下圖:
在這裏插入圖片描述

frame 三種方法

switch_to.frame()

語法:

switch_to.frame(reference)

reference是傳入的參數,用來定位frame的,可以傳入id,name,index及selenium的WebElement對象(即find_element)。

舉個例子:

在這裏插入圖片描述
如何定位到iframe呢:

from selenium import webdriver
driver = webdriver.Chrome()
#用frame的index來定位,第一位時0
driver.switch_to.frame(0)

一般情況,咱們使用id和name就能解決大部分問題。
但是,萬事都有特例,如果沒有id和name怎麼辦?
這難不倒我們,可以直接使用index 和webElement來定位。
>> index從0開始,傳入整型參數即判定爲用index定位,傳入str參數則判定爲用id/name定位。
>> WebElement對象,即用find_element系列方法所取得的對象,我們可以用tag_name、xpath等來定位frame對象。

switch_to.default_content()

如何返回到主文檔,我們就是用:

driver.switch_to.default_content()

switch_to.parent_frame()

如果我們遇到嵌套的frame,怎麼辦呢?
不要慌,我們直接派出**switch_to.parent_frame()**來應對。

舉個例子:

在這裏插入圖片描述
1.從主文檔切到frame2,一層層切入

driver.switch_to.frame(“frame1”)
driver.switch_to.frame(“frame2”)

2.從frame2再切回frame1,

driver.switch_to.parent_frame()

#只針對非主文檔,才能看出效果
#如果是主文檔,則看不出效果
#switch_to.parent_frame() 這功能,其實就相當於後退的方法。

敲黑板:
有的大佬在使用switch_to_frame()寫法時,報錯,
是由於官網現在不推薦了。
直接改成
switch_to.frame()
這個寫法即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章