web自动化-selenium(三)

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()
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容