A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区


老方法:
不同窗口之间的切换(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


1 个回复

正序浏览
奈斯,加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马