selenium之如何定位iframe中的元素

2021-09-12 07:27:15 字數 2473 閱讀 2308

今天想寫個126郵箱自動化登入指令碼,由於id是動態的,name也獲取不到,最後通過檢視頁面發現是寫在iframe中,所以要先獲取表單,在獲取表單中的元素,**如下!

1,頁面**:

,2,自動化登入**:

,3,selenium-iframe操作

iframe,又叫浮動幀標記,是內嵌的網頁元素,可以將乙個html檔案嵌入到另乙個html檔案中顯示。

最典型的案例就是163郵箱登入:被綠色覆蓋的部分即為iframe。

對iframe進行操作,需要用到一下種方法:

1.確定要操作的元素是否在iframe上。

firebug給我們提供了乙個很簡易的操作。

以「網易郵箱登入為例」,開啟網頁啟動firebug

隨便選中乙個元素,若左上角顯示的是topwindow,則該元素不在iframe上,如「郵箱賬號登入」

若左上角現實的是iframe#***,則該元素在iframe上,操作該元素需要先切換到該iframe上,***為這個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("***")

driver.find_element_by_css_selector("input[name='password']").send_keys("***")

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("")

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("***")

driver.find_element_by_css_selector("input[name='password']").send_keys("***")

time.sleep(3)

driver.find_element_by_id("dologin").click()

#退出iframe

Selenium之元素定位

1.檢視頁面元素 id class type name等。2.通過webdriver的方法定位 絕對路徑 find element by xpath html body div 1 div 1 div div 1 div form span 1 input 相對路徑 find element by ...

selenium之定位方法

html元素定位的方法 1 id find element by id 2 name find element by name 3 class find element by class name 4 tag find element by tag name 5 link find element ...

selenium如何定位同級節點

場景 當定位某個元素時,發現所需要的元素在同級節點,可以用 following sibling 方法 定位同級的第二位 當定位統計節點的第二個定位相鄰節點。可以用 preceding sibling 定位同級的第一位 selenium定位父子 兄弟 相鄰節點定位方法。案例 一 需要定位到關閉按鈕。x...