Python+Selenium学习笔记8 - 多表单&多窗口切换
1.多表单切换
下图为待测页面:内嵌百度首页
切换到百度首页进行操作
1 # coding = utf-8
2
3 from selenium import webdriver
4 import os
5 import time
6
7 dr = webdriver.Firefox()
8 file_path = 'file:///' + os.path.abspath('frame.html')
9 dr.get(file_path)
10
11 # 切换到iframe(id="if")
12 dr.switch_to.frame("if")
13
14 dr.find_element_by_id("kw").send_keys("selenium")
15 dr.find_element_by_id("kw").submit()
16 time.sleep(3)
17
18 dr.close()
switch_to.frame()可以直接取表单的id或name属性。如果iframe没有可用的id和name属性。可用以下方式进行定位
...... # 先通过xpath定位到iframe
xf = driver.find_element_by_xpath('//*[@class="if"]') # 再将定位对象传给switch_to.frame()方法
driver.switch_to.frame(xf)
......
driver.switch_to.parent_frame()
还有其他方法switch_to.parent_content(), switch_to.default_content()
这些方法我都没用过
2.多窗口切换
以百度首页的登录为例,在百度首页点击【登录】,弹出登录窗口,点击右下角的【立即注册】,跳转到注册页面,再返回首页搜索
1 # coding = utf-8
2
3 from selenium import webdriver
4 import time
5
6 dr = webdriver.Firefox()
7 dr.implicitly_wait(10)
8 dr.get("http://www.baidu.com")
9
10 # 获得百度搜索窗口的句柄
11 search_window = dr.current_window_handle
12
13 dr.find_element_by_xpath('/html/body/div[1]/div[1]/div/div[3]/a[7]').click() # 这里试过用class和name去定位都不行
14 time.sleep(3)
15 dr.find_element_by_link_text('立即注册').click() # 常试过用这个方法定位左下角的“用户名登录”,但是定位不到
16 time.sleep(3)
17
18 # 获得当前所有打开的窗口的句柄
19 all_handles = dr.window_handles #这里得出的是一个list,有两个元素的list,一个是首页的句柄,一个是立即注册的句柄
20
21
22 # 进入注册窗口
23 for handle in all_handles:
24 if handle != search_window: #循环到的句柄不是首页的句柄,就是注册的句柄
25 dr.switch_to.window(handle) #switch_to.window()用于切换到相应的窗口
26 print('now register window!')
27 dr.find_element_by_name("userName").send_keys("username")
28 dr.find_element_by_name("phone").send_keys("12345678909")
29 time.sleep(5)
30
31 # 回到搜索窗口
32 for handle in all_handles:
33 if handle == search_window:
34 dr.switch_to.window(handle)
35 print("now search window!")
36 dr.find_element_by_id("TANGRAM__PSP_2__closeBtn").click() #首页悬浮窗口的右上角的关闭按钮
37 dr.find_element_by_id("kw").send_keys("selenium")
38 dr.find_element_by_id("kw").submit()
39 time.sleep(5)
40
41 dr.quit()
综上
switch_to.window() 用于切换到相应的窗口
switch_to.frame() 用于切换到相应的表单
Python+Selenium学习笔记8 - 多表单&多窗口切换的更多相关文章
- Ext JS4 学习笔记之发送表单(Form)时也将表单下的表格(Grid)数据一同发送的方法
Ext JS4 学习笔记之发送表单(Form)时也将表单下的表格(Grid)数据一同发送的方法 昨天在开发的时候遇到个小问题,就是如何将Grid的内容与Form一起发送到服务器端.默认情况下,表单(F ...
- HTML5学习笔记<五>: HTML表单和PHP环境搭建
HTML表单 1. 表单用于不同类型的用户输入 2. 常用的表单标签: 标签 说明 <form> 表单 <input> 输入域 <textarea> 文本域 < ...
- Python+Selenium学习笔记6 - 定位
1.8种针对单个元素的定位方法 find_element_by_id() find_element_by_name() find_element_by_class_name() find_elemen ...
- Python+Selenium学习笔记4 - submit&get_attribute
1.submit() submit()方法用于提交表单.如在搜索框输入关键字后按回车键进行查询操作,就可用submit()方法模拟.若不能按回车键进入下一步,则不能用submit()举例,百度的查询提 ...
- knockoutJS学习笔记08:表单域绑定
前面的绑定都是用在基本标签上,这章主要讲表单域标签的绑定. 一.value 绑定 绑定标签:input text.textarea. <p>用户名:<input type=" ...
- HTML 学习笔记 JQuery(表单,表格 操作)
表单应用 一个表单有3个基本组成部分 (1)表单标签:包含处理表单数据所用的服务器端程序URL 以及数据提交到服务器的方法 (2)表单域:包含文本框 密码框 隐藏框 多行文本框 复选框 单选框 下拉选 ...
- redux-form的学习笔记二--实现表单的同步验证
(注:这篇博客参考自redux-form的官方英文文档)左转http://redux-form.com/6.5.0/examples/syncValidation/ 在这篇博客里,我将用redux-f ...
- HTML学习笔记8:表单
什么是表单? 一个网页表单可以将用户输入的数据发送到服务器进行处理.因为互联网用户使用复选框,单选按钮或文本字段填写表格,所以WebForms的形式类似文件或数据库.例如,WebForms ...
- PHP学习笔记 01 之表单传值
一.HTML传值/PHP接收方法 1.GET(地址栏+问号+数据信息) (1)方式一:表单Form: method = 'get' GET接收数据方式: $_GET['表单元素name对应的值] (2 ...
随机推荐
- 微软加入字节码联盟,进一步开发支持Blazor 的WebAssembly技术
字节码联盟 (Bytecode Alliance)宣布已正式成为 501(c)(3) 非营利组织,参与组建的企业/组织包括 Fastly.英特尔.Mozilla 和微软,此外还邀请到了 Arm.DFI ...
- 15- web安全测试与appscan Scrawlr的使用
web应用安全性问题 认证与授权测试要点 认证与授权测试要点之授权 session与cookie之cookie测试点: session测试点: 上传文件漏洞 SQL注入 SQL注入原理 SQL注入检查 ...
- BLDC有感FOC算法理论及其STM32软硬件实现
位置传感器:旋转编码器 MCU:STM32F405RGT6 功率MOS驱动芯片:DRV8301 全文均假设在无弱磁控制的情况下 FOC算法理论 首先,我们要知道FO ...
- 逆向 string.h 函数库 memset、strcpy、strcmp 函数
memset 函数 函数原型:void *memset(void *str, int c, size_t n) 主要功能:复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符 ...
- C#-几个STL相关
C#结构体排序 1................................................. 声明 struct data { public string A; public ...
- Win64 驱动内核编程-14.回调监控文件
回调监控文件 使用 ObRegisterCallbacks 实现保护进程,其实稍微 PATCH 下内核,这个函数还能实现文件操作监视.但可惜只能在 WIN7X64 上用.因为在 WIN7X64 上 P ...
- [CTF]摩斯电码
摩尔斯电码 -----------转载 https://morse.supfree.net/ 摩尔斯电码定义了包括:英文字母A-Z(无大小写区分)十进制数字0-9,以及"?"&qu ...
- 使用QT creator实现一个五子棋AI包括GUI实现(8K字超详细)
五子棋AI实现 五子棋游戏介绍 五子棋的定义 五子棋是全国智力运动会竞技项目之一,是具有完整信息的.确定性的.轮流行动的.两个游戏者的零和游戏.因此,五子棋是一个博弈问题. 五子棋的玩法 五子棋有两种 ...
- 【Github搬砖】Python入门网络爬虫之精华版
Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 另外,比较常用的爬虫框架Scrapy,这里最后也详细介绍一下. 首先列举一下本人总结的相关文章,这些覆盖了入门网络爬虫需要的基本概念和技巧 ...
- layui中的多图上传
效果展示: 1.html部分: 注:<input> 作为隐藏域,用于保存多图上传的资源数组,方便后期进行 form 表单的提交 <input type="hidden&qu ...