iframe切換和窗口切換


今天繼續講知識點,關於切換,因為我們在元素定位的時候,明明在網頁下面f12可以定位到,但是就是寫代碼的時候發現不行,今天的切換就可以解決這個問題

一、iframe切換

先拋出一個問題:

 1.1方式一:通過iframe標簽的name屬性進行切換

import time

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

driver = Chrome()
driver.implicitly_wait(10)
driver.get('https://qzone.qq.com/')
# 方式一:通過iframe標簽的name屬性進行切換
driver.switch_to.frame("login_frame")

driver.find_element(By.ID, 'switcher_plogin').click()

time.sleep(3)  # 待3秒后退出
driver.quit()

 1.2方式二:先定位iframe,通過定位到的元素進行切換

先定位iframe,通過定位到的元素進行切換
import time

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

driver = Chrome()
driver.implicitly_wait(10)
driver.get('https://qzone.qq.com/')
# 方式二:先定位iframe,通過定位到的元素進行切換
login_frame = driver.find_element(By.XPATH, '//iframe[@id="login_frame"]')
driver.switch_to.frame(login_frame)

driver.find_element(By.ID, 'switcher_plogin').click()

time.sleep(3)  # 待3秒后退出
driver.quit()

 1.3方式三:通過iframe標簽的下標索引位置,進行切換

import time

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

driver = Chrome()
driver.implicitly_wait(10)
driver.get('https://qzone.qq.com/')
# 方式三:通過iframe標簽的下標索引位置,進行切換
driver.switch_to.frame(0)

driver.find_element(By.ID, 'switcher_plogin').click()

time.sleep(3)  # 待3秒后退出
driver.quit()

 其他:如何從iframe中切換到原來的頁面中

二、窗口切換

2.1切換進入新的窗口

打開一個新的窗口后,怎么在新的窗口標簽頁中,才有效?

import time

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

driver = Chrome()
driver.implicitly_wait(10)

# 打開百度
driver.get('https://www.baidu.com/')

# 在百度的輸入框輸入58同城,並點擊百度一下按鈕
driver.find_element(By.ID, 'kw').send_keys("58同城")
driver.find_element(By.ID, 'su').click()
# 選擇百度頁面搜索結果的第一個進行點擊,進入新的窗口
driver.find_element(By.XPATH, "//a[@data-url='http://www.58.com']").click()

# 獲得所有窗口的句柄
all_handles = driver.window_handles
# 通過獲取句柄的方式切換到新打開的58同城窗口
driver.switch_to.window(all_handles[-1])
# 在新的窗口鏈接中(也就是打開的58同城頁面中)的搜素框中輸入python
driver.find_element(By.XPATH, "//input[@id='keyword']").send_keys("python")

time.sleep(3)  # 待3秒后退出
driver.quit()

 2.2兩個窗口之間的切換

比如,從新的窗口中切回去,怎么辦?

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

driver = Chrome()
driver.implicitly_wait(10)

# 打開百度
driver.get('https://www.baidu.com/')

# 在百度的輸入框輸入58同城,並點擊百度一下按鈕
driver.find_element(By.ID, 'kw').send_keys("58同城")
driver.find_element(By.ID, 'su').click()
# 選擇百度頁面搜索結果的第一個進行點擊,進入新的窗口
driver.find_element(By.XPATH, "//a[@data-url='http://www.58.com']").click()

# 獲得所有窗口的句柄
all_handles = driver.window_handles
# 通過獲取句柄的方式切換到新打開的58同城窗口
driver.switch_to.window(all_handles[-1])
# 在新的窗口鏈接中(也就是打開的58同城頁面中)的搜素框中輸入python
driver.find_element(By.XPATH, "//input[@id='keyword']").send_keys("python")

# 如果我要返回原來的窗口,怎么切換?目前我這里只有兩個窗口
# 選擇句柄為第一個位置的,切回去
driver.switch_to.window(all_handles[0])  # 運行結果,此時已經顯示原來的網頁

time.sleep(3)  # 待3秒后退出
driver.quit()

 2.3多個窗口的切換

如果在項目需求中,需要打開打開多個窗口,並不停的在多個網頁之間來回切換,這種用代碼如何來處理?

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

driver = Chrome()
driver.implicitly_wait(10)

# 打開百度
driver.get('https://www.baidu.com/')

# 在百度的輸入框輸入58同城,並點擊百度一下按鈕
driver.find_element(By.ID, 'kw').send_keys("58同城")
driver.find_element(By.ID, 'su').click()
# 記錄當前百度輸入58的句柄
baidu_58_handle = driver.current_window_handle

# 選擇百度頁面搜索結果的第一個進行點擊,進入新的窗口
driver.find_element(By.XPATH, "//a[@data-url='http://www.58.com']").click()

# 獲得所有窗口的句柄
all_handles = driver.window_handles
# 通過獲取句柄的方式切換到新打開的58同城窗口
driver.switch_to.window(all_handles[-1])
# 在新的窗口鏈接中(也就是打開的58同城頁面中)的搜素框中輸入python
driver.find_element(By.XPATH, "//input[@id='keyword']").send_keys("python")
time.sleep(2)
# 記錄點擊第一個58同城的句柄
no1_58_handle = driver.current_window_handle

# 如果我要返回原來的窗口,怎么切換?
driver.switch_to.window(baidu_58_handle)  # 運行結果,此時已經顯示原來的網頁

# 那么我選擇原來網頁的其他的搜索結果進行點擊,比如我選擇下面的58同城找工作網
driver.find_element(By.XPATH, "//div[@id='5']").click()
# 這里進行窗口切換,-1是最新的那個
driver.switch_to.window(all_handles[-1])
# 記錄找工作58網的句柄
job58_handle = driver.current_window_handle

# 接下來,想怎么切就怎么切換,只要前面有記錄就可以
driver.switch_to.window(baidu_58_handle)
driver.switch_to.window(no1_58_handle)
driver.switch_to.window(job58_handle)

time.sleep(5)  # 待3秒后退出
driver.quit()

三、alert切換

在做項目的時候,偶爾會碰到一些alert彈窗,這種情況,如何來切換進入后對其進行操作呢?

"""
alert彈窗切換:driver.switch_to.alert

alert_object = driver.switch_to.alert
alert_object的方法:
        accept():點擊確定 dismiss():點擊取消 send_keys():如果alert彈窗中有輸入框,則可以使用該方法
alert_object的屬性:
        text:彈出的文本內容
"""
import time
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By

driver = Chrome()
driver.implicitly_wait(10)

# 出現alert彈窗
driver.get(r'D:\pythonProject\web_05day\alert彈窗演示.html')
driver.find_element(By.ID, 'btn').click()
time.sleep(1)  # 等1秒鍾看效果

# 先切換進入彈窗,再按確認按鈕
alert_object = driver.switch_to.alert
alert_object.accept()

# 彈窗上的取消按鈕,我這里把它寫成了一行
# driver.switch_to.alert.dismiss()

driver.find_element(By.ID, 'user').send_keys("Excellent")


time.sleep(3)  # 待3秒后退出
driver.quit()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM