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