今天來了解一下 frame的標籤。
frame標籤有三種:frameset、iframe、frame;
>>>frameset就當做一個普通的標籤使用,
>>>而frame與iframe就有點特殊了。
所以接下來的時間,我們要針對frame和iframe進行詳細的操作。
Frame與Ifream操作
frame 與 iframe的區別
- Frame與Iframe兩者可以實現的功能基本相同,不過Iframe比Frame具有更多的靈活性。
- frame是整個頁面的框架,iframe是內嵌的網頁元素,也可以說是內嵌的框架。
- Iframe 標記又叫浮動幀標記,可以用它將一個HTML文檔嵌入在一個HTML中顯示。
- Iframe和Frame標記的最大區別是在網頁中嵌入 的所包含的內容與整個頁面是一個整體,而< /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() 這個寫法即可。