WEB自动化之多窗口操作、切换frame、弹窗处理

1.浏览器无头模式配置

from selenium import webdriver

# 浏览器无头模式配置,无界面模式,减少浏览器的渲染
options = webdriver.ChromeOptions()
options.headless =True

driver = webdriver.Chrome(options=options)
driver.get("http://www.baidu.com")
print(driver.title)
driver.quit()




from selenium import webdriver
option = webdriver.ChromeOptions()
option.page_load_strategy = "none"  #取消所有等待
option.page_load_strategy = "normal"  #普通模式:默认属性,等待整个dom资源加载完成
option.page_load_strategy = "eager"  #极速模式:除了dom必要元素加载等待,其余元素皆不等待
driver = webdriver.Chrome(options=option)

2.页面加载超时时间设置

from selenium import webdriver

driver = webdriver.Chrome()
driver.set_page_load_timeout(3) #设置页面加载超时时间为3s
driver.get("http://shop-xo.hctestedu.com/")
print(driver.title)
driver.quit()

  如果超时,则会报错(TimeoutException):

  

 3.全屏操作

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.baidu.com/")
driver.fullscreen_window()  #全屏
time.sleep(3)
driver.quit()

4.设置浏览器窗口大小与位置

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.baidu.com/")
driver.set_window_size(500,500)   #设置浏览器窗口大小
time.sleep(3)
driver.set_window_position(100,200)    #设置浏览器窗口位置
time.sleep(3)
driver.quit()

5.打开新的浏览器标签或窗口

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.switch_to.new_window("tab")  #打开一个新的标签,通过向new_window中传tab控制
driver.get("http://www.baidu.com")    #在新创建的标签中打开百度
time.sleep(3)
driver.switch_to.new_window("window")    #打开一个新的窗口,通过向new_window中传window控制
driver.get("http://shop-xo.hctestedu.com/")     #在新创建的标签中打开网址
time.sleep(3)
driver.quit()

6.浏览器标签之间的切换

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.switch_to.new_window("tab")  #打开一个新的标签,通过向new_window中传tab控制,现在一共两个标签页
driver.get("http://www.baidu.com")    #在新创建的标签中打开百度
time.sleep(3)
window_taps = driver.window_handles   #driver.window_handles以列表的方式展示出所有标签对象的名称即句柄
print(window_taps) #结果:['CDwindow-48C930414CCDB53B6BECF2D32FF9E2FE', 'CDwindow-840CECAEA8120703996E64966C07E054']
time.sleep(3)
driver.switch_to.window(window_taps[0])  #switch_to.window控制标签页切换,标签页列表加下标决定切换到哪一页
time.sleep(3)
driver.switch_to.window(window_taps[1])
driver.quit()

7.句柄的执行顺序

我们通过web自动化的方式打开百度并且输入“华测”关键字,点击查询进入查询结果页面,用for循环模拟点击检索出来的所有的结果(当前页),打开n个新的标签,然后用for循环进行浏览器页签的切换。

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.find_element("id", "kw").send_keys("华测")
driver.find_element("id", "su").click()
WebDriverWait(driver, 5).until(EC.visibility_of_element_located(("id", "wrapper_wrapper")))
a_list = driver.find_elements("xpath", "//h3//a")

open_short = []
for i in a_list:   
    print(i.get_attribute("text"))
    open_short.append(i.get_attribute("text")) 
    i.click()  #依次点击所有的查询结果打开新的页面
print(open_short)

switch_short = []
#driver.window_handles[1:]---->获取到除了查询列表页(第一个标签页)之外的所有的标签(句柄)
#reversed(driver.window_handles[1:])----->句柄存储按照先进后出的原则,如果不反转,标签切换将会从最后一个标签页向前切换
for i in reversed(driver.window_handles[1:]):   
    driver.switch_to.window(i)
    print(driver.title)
    switch_short.append(driver.title)
print(driver.window_handles)
print(switch_short)

 8.frame切换

from selenium import webdriver
driver=webdriver.Chrome()
frame_ele = driver.find_element("id","aa")  #定位到要切换的frame
driver.switch_to.frame(frame_ele)  #切换到目标frame中
driver.switch_to.parent_frame()   #操作完后退回到原本的frame中,上层
driver.switch_to.default_content() #切换到顶层

9.alert弹框操作

driver.find_element("id"."alert")  点击时间吊起弹框
driver.switch_to.alert.accept()    相当于点击确定
driver.switch_to.alert.dismiss()   相当于点击取消
driver.switch_to.send_keys('str')  相当于在弹框输入框中输入内容或上传文件

10.悬浮菜单

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
driver.get('https://www.baidu.com/')
setting = driver.find_element('id','s-usersetting-top')
ActionChains(driver).move_to_element(setting).perform()
driver.find_element('link text','高级搜索').click()

WEB自动化之多窗口操作、切换frame、弹窗处理_第1张图片

你可能感兴趣的:(自动化,python)