黑马程序员技术交流社区
标题:
【上海校区】 selenium 切换窗口、frame、alert的新方法switch_to.
[打印本页]
作者:
不二晨
时间:
2019-1-4 09:33
标题:
【上海校区】 selenium 切换窗口、frame、alert的新方法switch_to.
老方法:
不同窗口之间的切换(handle):
切换窗口的方法
current_window_handle 获取当前页面窗口的句柄
window_handles 获取所有页面窗口的句柄
switch_to_window(window_name) 将定位的页面转到指定的window_name页面
(window_name:指定页面窗口的handle)
--------------------------------------------------------------------------------------
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get("https://tieba.baidu.com/")
sleep(1)
driver.maximize_window()
sleep(3)
driver.find_element_by_css_selector("a[title = '娱乐明星']").click() # 点击title为娱乐明星的<a>标签元素
sleep(2)
all = driver.window_handles # 获取全部窗口的handle
print(all)
now_page = driver.current_window_handle # 获取当前窗口的handle(贴吧首页)
print(now_page)
title_first_page = driver.title # 获取当前页面的title(当前title)
print(title_first_page)
driver.switch_to_window(all[1]) # 将页面handle转到娱乐明星页面
title_next_page = driver.title # 获取当前页面的title(切换handle后)
print(title_next_page)
------------------------------------------------------------
打印:
['CDwindow-BCA0B0104E3564B15620A9ABCE23D640', 'CDwindow-D6437B97CE2171D745BD097809C2F1C1']
CDwindow-BCA0B0104E3564B15620A9ABCE23D640
百度贴吧——全球最大的中文社区
C:/Users/Administrator/PycharmProjects/untitled/day1/test9.py:25: DeprecationWarning: use driver.switch_to.window instead
driver.switch_to_window(all[1])
娱乐明星_百度贴吧
Process finished with exit code 0
----------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
老方法:
切换页面frame:
关于页面frame的方法
switch_to_frame(frame_reference) 通过id、name、element(定位的某个元素)、索引来切换到某个frame
switch_to_default_content() 切换到主页面
注:driver.switch_to_frame(None) 等同于 driver.switch_to_default_content()
---------------------------------------------------------------------------
w3c网站的frame切换:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.w3school.com.cn/tiy/t.asp?f=html_frame_cols")
driver.maximize_window()
#定位父类层级iframe
ele_framest = driver.find_element_by_css_selector('#result > iframe')
# 切换到父类层级iframe-通过元素切换
driver.switch_to_frame(ele_framest)
print(driver.page_source)
print("----------------------------------------------------------")
#切换到第二个子类frame-通过索引切换
driver.switch_to_frame(1)
print(driver.page_source)
print("----------------------------------------------------------")
#切换到最上层层级-等同于driver.switch_to_frame(None)
driver.switch_to_default_content()
print(driver.page_source)
----------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
老方法:
获取浏览器弹窗alert、自定义弹窗以及其操作:
关于alert弹窗的方法:
switch_to_alert() 定位到alert弹窗,返回一个弹窗的对象
dismiss() 对弹窗对象的取消操作(相当于点击弹窗上的取消按钮)
accept() 对弹窗对象的确定操作(相当于点击弹窗上的确定按钮)
text 对弹窗对象,获取弹窗内的文本
send_keys(key) 对弹窗对象内的输入框输入数据(如果弹窗的格式有输入框的话可以使用)
authenticate(name, pass) 对于身份认证弹窗,输入用户名和密码并自动提交
------------------------------------------------------------------------------------------
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get("http://www.w3school.com.cn/tiy/t.asp?f=jseg_prompt")
driver.maximize_window()
driver.switch_to_frame("i") # 通过frame的name值来定位
ele = driver.find_element_by_css_selector('body > input[type="button"]')
ele.click() # 点击按钮触发弹窗
sleep(2)
a = driver.switch_to_alert() # 定位到到弹窗
print(driver)
print(a.text) # 获取弹窗的内容
a.dismiss() # 触发取消按钮
sleep(2)
ele.click() # 再次点击按钮触发弹窗
a.send_keys("Jodie") # 在弹窗中的输入框输入数据
sleep(2)
a.accept() # 触发确认按钮
-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
切换窗口、frame、alert的新方法:
switch_to.
driver.switch_to.active_element()
等同于
driver.switch_to_active_element() 定位到当前聚焦的元素上
driver.switch_to.alert()
等同于
driver.switch_to_alert() 切换到alert弹窗
driver.switch_to.default_content()
等同于
driver.switch_to_default_content() 切换到最上层页面
driver.switch_to.frame(frame_reference)
等同于
driver.switch_to_frame(frame_reference) 通过id、name、element(定位的某个元素)、索引来切换到某个frame
driver.switch_to.window(window_name)
等同于
driver.switch_to_window(window_name) 切换到制定的window_name页面
driver.switch_to.parent_frame()
这是switch_to中独有的方法,可以切换到上一层的frame,对于层层嵌套的frame很有用
---------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------
---------------------
转载,仅作分享,侵删
作者:Jodie_Rao
原文:
https://blog.csdn.net/Rao_Juan/article/details/85554482
作者:
不二晨
时间:
2019-1-10 10:28
奈斯,加油
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2