亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > 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的方法的相關信息資訊供網民參考!
  • 推薦文章
    青青久久网| 亚久久伊人精品青青草原2020| 久草免费在线色站| 天天做人人爱夜夜爽2020 | 国产亚洲精品aaa大片| 亚洲精品久久玖玖玖玖| 国产伦精品一区三区视频| 99色播| 深夜做爰性大片中文| 精品视频在线观看一区二区三区| 国产美女在线观看| 色综合久久手机在线| 欧美日本韩国| 国产原创中文字幕| 九九精品影院| 国产高清视频免费| 国产综合成人观看在线| 日韩综合| 日韩中文字幕一区| 国产国语对白一级毛片| 黄色福利片| 精品视频免费在线| 精品久久久久久免费影院| 精品视频在线看| 99久久精品国产免费| 成人高清护士在线播放| 天天色色色| 午夜欧美成人香蕉剧场| 高清一级片| 青青久久国产成人免费网站| 亚久久伊人精品青青草原2020| 99久久精品费精品国产一区二区| 国产一区免费在线观看| 日韩一级黄色大片| a级毛片免费全部播放| 精品国产一区二区三区精东影业| 久草免费在线色站| 国产精品自拍亚洲| 日韩中文字幕一区| 欧美激情一区二区三区视频| 国产原创中文字幕| 成人a大片高清在线观看| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 高清一级做a爱过程不卡视频| 四虎影视精品永久免费网站 | 精品国产一级毛片| 中文字幕97| 日本免费看视频| 美国一区二区三区| 欧美激情一区二区三区在线 | 国产网站免费观看| 精品国产一区二区三区国产馆| 91麻豆精品国产高清在线| 天天色色色| 国产精品自拍亚洲| 香蕉视频一级| 深夜做爰性大片中文| 国产精品自拍亚洲| 国产不卡在线观看| a级毛片免费全部播放| 精品视频免费看| 国产极品精频在线观看| 成人影视在线观看| 色综合久久手机在线| 韩国三级视频网站| 成人影院久久久久久影院| 精品视频在线看| 天天做日日干| 精品国产香蕉在线播出| 日韩综合| 国产亚洲免费观看| 国产麻豆精品免费密入口| 国产亚洲精品aaa大片| 亚洲 国产精品 日韩| 国产美女在线观看| 日韩免费在线观看视频| 亚洲第一页色| 国产美女在线观看| 成人在免费观看视频国产| 国产伦精品一区二区三区无广告 | 久久国产精品只做精品| 成人a大片高清在线观看| 免费国产一级特黄aa大片在线| 精品久久久久久免费影院| 国产亚洲精品aaa大片| 91麻豆国产级在线| 一本高清在线| 可以在线看黄的网站| 欧美激情一区二区三区中文字幕| 国产不卡在线观看| 亚洲爆爽| 一级毛片看真人在线视频| 999久久狠狠免费精品| a级精品九九九大片免费看| 欧美大片毛片aaa免费看| 国产麻豆精品视频| 亚洲精品中文一区不卡| 韩国三级视频网站| 欧美a级片免费看| 欧美另类videosbestsex高清 | 国产一区二区精品| 成人高清视频免费观看| 韩国毛片免费大片| 色综合久久手机在线| 欧美大片毛片aaa免费看| 美女免费黄网站| 可以在线看黄的网站| 亚欧视频在线| 国产伦久视频免费观看视频| 国产精品免费精品自在线观看| 成人免费观看的视频黄页| 精品国产一区二区三区国产馆| 亚洲第一色在线| 高清一级做a爱过程不卡视频| 日韩一级黄色大片| 精品在线观看一区| 黄视频网站在线免费观看| 国产国语对白一级毛片| 国产综合成人观看在线| 日韩中文字幕在线播放| 成人高清视频免费观看| 精品国产亚洲人成在线| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 中文字幕97| 亚洲天堂在线播放| 高清一级片| 成人免费一级毛片在线播放视频| 欧美1区| 99久久精品国产免费| 成人影院久久久久久影院| 精品久久久久久中文| 韩国三级视频在线观看| 国产91丝袜高跟系列| 国产麻豆精品免费密入口| 精品久久久久久中文字幕一区| 91麻豆tv| 国产网站在线| 成人在免费观看视频国产| 九九免费精品视频| 国产极品精频在线观看| 可以在线看黄的网站| 日韩中文字幕在线播放| 韩国三级香港三级日本三级la| 国产精品123| 国产福利免费观看| 国产伦久视频免费观看视频| 韩国三级香港三级日本三级la| 天天做人人爱夜夜爽2020 | 国产精品1024永久免费视频| 可以免费看污视频的网站| 美女免费黄网站| 国产原创中文字幕| 欧美一级视频免费| 精品国产一区二区三区免费 | 国产成人精品综合在线| 日韩中文字幕在线播放| 成人高清护士在线播放| 久久精品免视看国产明星| 999久久狠狠免费精品| 国产a视频| 欧美激情一区二区三区中文字幕| 91麻豆国产级在线| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 日韩男人天堂| 国产一区二区精品尤物| 国产欧美精品午夜在线播放| 日韩中文字幕在线亚洲一区 | 日日夜夜婷婷| 91麻豆精品国产自产在线| 国产不卡在线看| 九九免费精品视频| 99色视频在线观看| 午夜久久网| 精品在线观看一区| 九九免费精品视频| 一级女性全黄生活片免费| 色综合久久天天综合观看| 国产极品精频在线观看| 毛片电影网| 欧美α片无限看在线观看免费| 国产国语对白一级毛片| 九九久久国产精品| 国产精品123| 999久久狠狠免费精品| 欧美激情一区二区三区在线 | 国产视频一区在线| 日本伦理片网站| 欧美一级视频免费| 四虎久久影院| 欧美1区| 高清一级做a爱过程不卡视频| 你懂的国产精品| 日本特黄特色aaa大片免费| 可以在线看黄的网站| 国产国语对白一级毛片| 国产高清在线精品一区二区| 日韩av东京社区男人的天堂| 精品视频在线看| 精品国产一级毛片| 亚洲天堂在线播放|