婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python3+selenium4實現切換窗口與iframe的方法

python3+selenium4實現切換窗口與iframe的方法

熱門標簽:電銷機器人的風險 手機網頁嵌入地圖標注位置 開封自動外呼系統怎么收費 開封語音外呼系統代理商 地圖標注線上如何操作 天津電話機器人公司 應電話機器人打電話違法嗎 400電話辦理哪種 河北防封卡電銷卡

在自動化測試過程中,有時后會遇到元素定位方式沒有問題,但是依舊拋出無法找到元素的異常的問題,通常情況下,如果元素定位沒有問題,但還是無法找到元素,則可能是由于當前焦點不在指定頁面或iframe導致的,以下將對兩種情況分別進行說明

1、切換窗口

比如我們現在有這樣一個需求,進入百度首頁后,點擊新聞,然后在新聞頁面的搜索框輸入selenium

而使用selenium要如何實現呢,在對selenium不是很熟悉的情況下,僅僅學習了之前的內容,寫出的代碼就可能會拋出找不到貼吧搜索輸入框元素異常,示例代碼如下

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Edge()
driver.get("https://www.baidu.com/")
driver.find_element(By.LINK_TEXT, '新聞').click()   # 點擊新聞
driver.find_element(By.ID, 'ww').send_keys('selenium')  # 在新聞首頁搜索框輸入selenium
driver.quit()

代碼看起來沒什么問題,打開百度首頁,點擊貼吧,然后在貼吧登錄頁面點擊立即注冊,元素定位也沒錯,但是執行就會拋出異常,無法找到貼吧的輸入框元素

造成此錯誤的原因是因為點擊新聞之后,又打開了一個新的窗口,此時打開的窗口有百度首頁和新聞頁,而selenium不知道我們需不需要切換窗口,所以不會自動給我們切換窗口,需要手動進行窗口的切換

而要實現窗口的切換,則需要用到獲取瀏覽器句柄以及窗口切換的方法

1.1、獲取句柄

句柄是當前瀏覽器窗口或選項卡的一個類似id一樣的唯一標識,可以用來判斷當前窗口或選項卡是否在指定的窗口,獲取句柄的方法如下:

獲取當前頁面句柄
driver.current_window_handle

獲取當前所有存在的窗口句柄,多個句柄以列表方式存儲
driver.window_handles

通常的,我們只需要使用當前窗口句柄與所有窗口句柄列表進行對比,然后使用窗口切換的方法,就可以完成窗口的切換

1.2、切換窗口

要完成窗口切換,需要使用方法switch_to.window(),完成新聞頁輸入selenium操作完整成功的示例代碼如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Edge()
driver.get("https://www.baidu.com/")
driver.find_element(By.LINK_TEXT, '新聞').click()   # 點擊新聞

handle = driver.current_window_handle  # 獲取當前窗口句柄
handles = driver.window_handles   # 獲取所有窗口句柄
for window_handle in handles:   # 循環比較句柄
    if window_handle != handle:   # 如果窗口句柄與當前窗口句柄不一致,則切換到該窗口
        driver.switch_to.window(window_handle)

driver.find_element(By.ID, 'ww').send_keys('selenium')  # 在新聞首頁搜索框輸入selenium
time.sleep(2)
driver.quit()

以上代碼只適用于兩個窗口的切換,如果同時打開更多窗口,使用上述代碼只能切換到列表最后一個非當前窗口,那存在多個窗口時需要如何準確的切換到指定的窗口呢,其實只需要追加一層判斷即可,示例如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Edge()
driver.get("https://www.baidu.com/")
driver.find_element(By.LINK_TEXT, '新聞').click()   # 點擊新聞

handle = driver.current_window_handle  # 獲取當前窗口句柄
handles = driver.window_handles   # 獲取所有窗口句柄
for window_handle in handles:   # 循環比較句柄
    if window_handle != handle:   # 如果窗口句柄與當前窗口句柄不一致,則切換到該窗口
        driver.switch_to.window(window_handle)
        if driver.title == '百度新聞——海量中文資訊平臺':     # 如果切換后的窗口的title與指定的一致,結束循環
            break

driver.find_element(By.ID, 'ww').send_keys('selenium')  # 在新聞首頁搜索框輸入selenium
time.sleep(2)
driver.quit()

上述代碼中添加了一層判斷切換后的窗口title是否與預期一致,如果一致則跳出循環以保證多窗口切換時能夠準確的切換到預期的窗口就停止切換

1.3、關閉窗口并切換回原窗口

在切換到指定窗口完成測試后,如果我們需要關閉此窗口并切換到原來的窗口,示例代碼如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Edge()
driver.get("https://www.baidu.com/")
driver.find_element(By.LINK_TEXT, '新聞').click()   # 點擊新聞

handle = driver.current_window_handle  # 獲取當前窗口句柄
handles = driver.window_handles   # 獲取所有窗口句柄
for window_handle in handles:   # 循環比較句柄
    if window_handle != handle:   # 如果窗口句柄與當前窗口句柄不一致,則切換到該窗口
        driver.switch_to.window(window_handle)
        if driver.title == '百度新聞——海量中文資訊平臺':     # 如果切換后的窗口的title與指定的一致,結束循環
            break
driver.find_element(By.ID, 'ww').send_keys('selenium')  # 在新聞首頁搜索框輸入selenium

driver.close()  # 關閉當前新聞窗口
driver.switch_to.window(handle)  # 切換回原窗口,即百度首頁
driver.find_element(By.ID, 'kw').send_keys('selenium')   # 百度首頁輸入框輸入selenium
time.sleep(2)
driver.quit()

需要注意的是,close()方法只是關閉當前所在窗口,但驅動的瀏覽器依舊處于等待執行狀態,而quit()則會退出當前會話,無論打開了多少個窗口,均會被一次性關閉,且瀏覽器不再接受新的操作命令

2、切換iframe

除了打開多個窗口會導致無法找到元素之外,如果元素包含在iframe中,也會導致無法找到元素,比如現有如下元素:

html>
    iframe src="a.html" id="frame0" name="frame1">
        input id="kw" / >
    /iframe>
/html>

此時id為kw的input標簽元素處于iframe中,要定位此元素,若直接使用

driver.find_element(By.ID, 'kw')

也會拋出無法找到元素的異常,那么如何實現frame的切換,從而精準定位到元素呢

2.1、切換到iframe中

selenium提供了switch_to.frame()方法用于實現frame的切換,此方法接收id、name、index以及selenium的WebElement對象用來實現切換,比如上述的代碼中,要切換到iframe中,則可以使用以下代碼實現:

from selenium import webdriver

driver = webdriver.Edge()
driver.switch_to.frame('frame0')   # 通過id切換iframe
# driver.switch_to.frame('frame1')   # 通過name切換iframe
# driver.switch_to.frame(0)   # 通過index切換iframe,0代表第一個
# driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))  # 通過WebElement對象切換iframe

一般情況下,通過id或name即可解決大部分iframe切換的問題,如果沒有這兩個屬性,再考慮使用index以及WebElement對象來實現

2.2、從frame中切換到主界面

在測試過程中,我們不僅會從主界面切換到iframe中,當操作完frame中的元素后,經常需要重新切換到主界面進行其他操作,切換回主頁面使用方法如下:

driver.switch_to.default_content()

2.3、嵌套多層iframe的切換

有時候我們會遇到嵌套多層frame的情況,如下所示

html>
    iframe src="a.html" id="frame1">
    	    iframe src="b.html" id="frame2" >
    			input id="kw" / >
			/iframe>
    /iframe>
/html>

多層嵌套的情況下,如果要從主界面切換到第二層iframe,則需要一層一層的切換進去,即先切換到frame1,再切換到frame2,而不是直接切換進入frame2

driver.switch_to.frame("frame1")
driver.switch_to.frame("frame2")

selenium還提供了一個切換到父frame的方法,比如我們切換到frame2之后,要想切換到frame1操作,則不需要先切回主界面再切換到frame,而是使用如下方法:

driver.switch_to.parent_frame()

需要注意的是,如果當前已經是主頁面,則使用此方法無效
靈活使用以上方法,則可輕松應對iframe的切換與窗口切換的問題,從此告別定位不到元素的苦惱

到此這篇關于python3+selenium4實現切換窗口與iframe的方法的文章就介紹到這了,更多相關python3 selenium4切換窗口與iframe內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 用Python selenium實現淘寶搶單機器人
  • Python selenium的這三種等待方式一定要會!
  • 教你如何使用Python selenium
  • Python爬蟲基礎初探selenium
  • 教你怎么用python selenium實現自動化測試
  • Python爬蟲基礎之selenium庫的用法總結
  • 教你怎么用Python selenium操作瀏覽器對象的基礎API

標簽:蘭州 江蘇 成都 六盤水 常州 山東 宿遷 駐馬店

巨人網絡通訊聲明:本文標題《python3+selenium4實現切換窗口與iframe的方法》,本文關鍵詞  python3+selenium4,實現,切換,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python3+selenium4實現切換窗口與iframe的方法》相關的同類信息!
  • 本頁收集關于python3+selenium4實現切換窗口與iframe的方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲免费观看视频| 精品午夜久久福利影院| 精品美女一区二区| 国产日韩成人精品| 亚洲最色的网站| 久久国产精品99久久久久久老狼| 国产日韩欧美一区二区三区综合| 欧美日韩大陆在线| 欧美日韩一区二区三区在线看| 欧美亚洲国产bt| 亚洲国产电影在线观看| 一区二区三区欧美激情| 欧美三级中文字幕在线观看| 亚洲大片免费看| 99久久精品国产一区| 亚洲成在人线在线播放| 日韩av在线发布| 精品视频123区在线观看| 成人欧美一区二区三区小说| 成人动漫av在线| 国产清纯白嫩初高生在线观看91| 国内精品在线播放| 中日韩av电影| 日韩一级大片在线观看| 看国产成人h片视频| 国产精品欧美综合在线| 色一区在线观看| 国内精品伊人久久久久av一坑| 亚洲国产乱码最新视频| 9l国产精品久久久久麻豆| 亚洲你懂的在线视频| 国产视频一区二区在线观看| 欧美日韩日本视频| 精品精品欲导航| 国产视频一区二区在线观看| 日韩精品一区二区三区中文不卡| 精品国产91九色蝌蚪| 国产精品家庭影院| 国产成人在线电影| 欧美成人a视频| 国产又黄又大久久| 国产精品色呦呦| 在线看一区二区| 国产在线播精品第三| 一区二区三区不卡在线观看| wwww国产精品欧美| 欧美一区二区观看视频| 99re在线视频这里只有精品| 国产一区二区按摩在线观看| 狠狠久久亚洲欧美| 国产欧美综合在线观看第十页| 91亚洲精品乱码久久久久久蜜桃| 美国十次了思思久久精品导航| 欧美日韩一级二级三级| 欧美日韩一区高清| 9l国产精品久久久久麻豆| 美国十次综合导航| 美国欧美日韩国产在线播放| 亚洲电影欧美电影有声小说| 日韩精品欧美精品| 亚洲福利视频一区| 日韩一区有码在线| 久久日一线二线三线suv| 欧美日韩免费不卡视频一区二区三区| 91浏览器入口在线观看| 67194成人在线观看| 欧美电影在线免费观看| 国产亚洲制服色| 中文字幕一区二区三区蜜月| 国产一区三区三区| 午夜国产不卡在线观看视频| 婷婷中文字幕一区三区| 亚洲精品欧美在线| 一区二区三区日本| 狠狠色丁香婷婷综合| 成人h动漫精品一区二区| 91视频91自| 国产精品久久久久婷婷二区次| 国产欧美一区二区在线观看| 亚洲欧美一区二区三区久本道91| 一区二区三区四区国产精品| 性感美女极品91精品| 色94色欧美sute亚洲线路一久 | 一区二区三区资源| 国产精品成人一区二区艾草 | 欧美视频在线观看一区二区| 日韩美女精品在线| 国产福利一区二区三区| 8v天堂国产在线一区二区| 亚洲国产成人tv| 国产成人高清在线| 欧美三区在线观看| 国产精品久久综合| 麻豆国产精品视频| 在线成人av影院| 免费精品视频最新在线| 精品国产人成亚洲区| 波多野结衣中文字幕一区二区三区| 精品欧美乱码久久久久久1区2区| 香蕉久久一区二区不卡无毒影院 | 欧美一级专区免费大片| 久久精品国产在热久久| 欧美午夜影院一区| 日韩成人免费电影| 中文字幕永久在线不卡| 在线日韩av片| 国产盗摄一区二区三区| 亚洲午夜视频在线观看| 欧美久久久一区| 久久成人久久爱| 欧美一卡二卡三卡四卡| 国产一区欧美日韩| 亚洲成a人v欧美综合天堂| 日韩视频一区二区三区在线播放| 99re这里只有精品首页| 亚洲黄色片在线观看| 欧美日韩中文字幕一区| 久久国产人妖系列| 一区二区三区.www| 久久国产精品99精品国产| 精品sm在线观看| 国产麻豆精品视频| 亚洲线精品一区二区三区八戒| 国产欧美一区二区三区鸳鸯浴| 欧美日本国产一区| 国产精品一区二区免费不卡 | 国产一区日韩二区欧美三区| 日韩在线一区二区| 中文字幕一区二区三区在线不卡| 久久99精品国产麻豆不卡| 亚洲一区二区在线播放相泽| 久热成人在线视频| www.在线成人| 日韩午夜av一区| 欧美激情一区二区三区不卡| 亚洲一区中文在线| 成人开心网精品视频| 欧美一级日韩一级| 亚洲成av人片一区二区三区| 粉嫩一区二区三区性色av| 欧美一区二区三区的| 亚洲欧美日韩一区二区| 黄页网站大全一区二区| 91麻豆免费看| 久久九九国产精品| 日本不卡视频一二三区| 91色乱码一区二区三区| 亚洲视频综合在线| 日韩一区二区三区三四区视频在线观看| 欧美日韩精品免费| 国产日韩精品视频一区| 国产精品理论在线观看| 一区二区三区91| 国产成人啪午夜精品网站男同| 国产精品资源站在线| 国产成人无遮挡在线视频| 久久精品国产久精国产| 欧美日韩免费观看一区三区| 久久久精品日韩欧美| 亚洲在线观看免费视频| 性欧美疯狂xxxxbbbb| 成人开心网精品视频| 欧美性大战久久久久久久| 中文字幕一区二区在线播放| 国产成人在线视频网址| 久久综合九色综合97婷婷| 一区二区三区四区av| 国产99精品国产| 中文一区二区在线观看| 亚洲伦在线观看| 日日夜夜精品视频免费| 欧美日韩国产片| 日韩成人免费电影| 日韩精品在线一区二区| ●精品国产综合乱码久久久久| 国产福利精品导航| 国产精品久久久久久久午夜片| 91亚洲精品久久久蜜桃网站| 日韩av一区二区三区四区| 欧美日本韩国一区二区三区视频| 亚洲一区二区视频| 欧美一区二区三区视频免费播放| 日韩成人一区二区三区在线观看| 欧美日韩综合一区| 一区二区欧美国产| 国产精品久久久久久久久图文区| jlzzjlzz欧美大全| 麻豆国产欧美一区二区三区| 欧美日韩一区二区三区视频| 午夜av一区二区| 成人免费视频在线观看| 国产欧美日韩在线观看| 成人h精品动漫一区二区三区| 亚洲国产中文字幕在线视频综合| 欧美一区二区福利视频| 成人免费视频caoporn| 奇米色一区二区三区四区| 国产.欧美.日韩| 亚洲18女电影在线观看| 国产日韩成人精品|