frame
frame:HTML页面中的一种框架,主要作用是在当前页面嵌套另一页面页面; (HTML语言中,frame/iframe标签为表单框架)
webdriver只能访问一个页面,默认是外层页面,如果要访问嵌套的页面,必须切换当前到嵌套页面中。
frame 切换
driver.switch_to.frame(frame 元素)
driver.switch_to.default_content() 切换到外层页面
from selenium import webdriver
driver = Chrome('./chromedriver')
driver.get('https://www.w3school.com.cn/tiy/t.asp?f=html_elements_select')
# 找到 iframe 元素
frame=driver.find_element_by_tag_name('iframe')
# 切换到 iframe 中
driver.switch_to.frame(frame)
# 查找 select 元素
select=driver.find_element_by_tag_name('select')
# 打印元素的 innerHTML 属性
print(select.get_attribute('innerHTML'))
多窗口
说明:在HTML页面中,经常有a标签也就是超链接,这些链接在被执行时,有的会在新的窗口打开链接;
多窗口切换
说明:在WebDriver中封装了获取当前窗口句柄方法和获取所有窗口句柄的方法以及切换指定句柄窗口的方法;(句柄:英文handle,窗口的唯一识别码)
driver.switch_to.window(窗口句柄)
from selenium import webdriver
import time
driver = Chrome('./chromedriver')
driver.get('http://www.baidu.com')
# 打开新的窗口
driver.find_element_by_link_text('新闻').click()
# 查看所有窗口句柄
print(driver.window_handles)
# 查看当前的窗口句柄
print(driver.current_window_handle)
# 切换窗口
driver.switch_to.window(driver.window_handles[0])
time.sleep(5)
# 切回窗口
driver.switch_to.window(driver.window_handles[1])
警告框处理
说明:WebDriver中对处理警告框的操作,有专用的处理方法;
提示: HTML中常用的对话框有三种,处理的方法都一样
1.alert
2.confirm
3.prompt
调用方法
获取当前窗口的警告框 alert=driver.switch_to.alert
警告框处理方法
accept : 接受对话框选项
dismiss : 取消对话框选项
from selenium import webdriver
import time
driver = Chrome('./chromedriver')
driver.get('http://www.baidu.com')
# 打开一个警告框
driver.execute_script("alert('hello')")
# 切换到警告框
alert = driver.switch_to.alert
# 关闭警告框
alert.dismiss()
什么是下拉选择框
说明:下拉框就是HTML中<select>元素;
Select类
from selenium.webdriver.support.select import Select
说明:Select 类是 WebDriver 为解决 select 标签定位诞生的,此类定位的是 select 标签。
使用步骤:
找到 select 元素
实例化 Select 对象
import time
from selenium.webdriver.support.select import Select
from selenium import webdriver
driver = Chrome('./chromedriver')
# 控制浏览器访问url地址
driver.get('file:///****/test.html')
# 单选 select
el = driver.find_element_by_id('select-single')
select_single = Select(el)
options=select_single.options
for i in range(len(options)):
# 通过下标选中
select_single.select_by_index(i)
time.sleep(1)
# 多选 select
el = driver.find_element_by_id('select-multiple')
select = Select(el)
options=select.options
print(options)
# 全部不选中
select.deselect_all()
for i in range(len(options)):
# 通过下标选中
select.select_by_index(i)
time.sleep(1)
select.deselect_all()
常用属性和方法
- select.options # select 中所有 options
- select.all_selected_options # 所有被选中的 option
- select.first_selected_option # 第一个被选中的 option
- select.select_by_value(value) # 通过 option 的值选中
- select.select_by_index(index) # 通过 option 的下标选中
- select.select_by_visible_text(text) # 通过 option 的可见文本选中
- select.deselect_all() # 全部不选中
- select.deselect_by_value(value) # 通过 option 的值取消选中
- select.deselect_by_index(index) # 通过 option 的下标取消选中
- select.deselect_by_visible_text(text) # 通过 option 的文本取消选中
selenium开启无界面模式
绝大多数服务器是没有界面的,selenium控制谷歌浏览器也是存在无界面模式的,这一小节我们就来学习如何开启无界面模式(又称之为无头模式)
开启无界面模式的方法
实例化配置对象
- options = webdriver.ChromeOptions()
配置对象添加开启无界面模式的命令 - options.add_argument("--headless")
配置对象添加禁用gpu的命令 - options.add_argument("--disable-gpu")
实例化带有配置对象的driver对象 - driver = webdriver.Chrome('./chromedriver', options=options)
注意:macos中chrome浏览器59+版本,Linux中57+版本才能使用无界面模式!
参考代码如下:
from selenium import webdriver
options = webdriver.ChromeOptions() # 创建一个配置对象
options.add_argument("--headless") # 开启无界面模式
options.add_argument("--disable-gpu") # 禁用gpu
driver = webdriver.Chrome('./chromedriver', options=options) # 实例化带有配置的driver对象
driver.get('https://www.baidu.cn')
print(driver.title)
driver.quit()