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 - 多表单&多窗口切换的更多相关文章

  1. Ext JS4 学习笔记之发送表单(Form)时也将表单下的表格(Grid)数据一同发送的方法

    Ext JS4 学习笔记之发送表单(Form)时也将表单下的表格(Grid)数据一同发送的方法 昨天在开发的时候遇到个小问题,就是如何将Grid的内容与Form一起发送到服务器端.默认情况下,表单(F ...

  2. HTML5学习笔记<五>: HTML表单和PHP环境搭建

    HTML表单 1. 表单用于不同类型的用户输入 2. 常用的表单标签: 标签 说明 <form> 表单 <input> 输入域 <textarea> 文本域 < ...

  3. Python+Selenium学习笔记6 - 定位

    1.8种针对单个元素的定位方法 find_element_by_id() find_element_by_name() find_element_by_class_name() find_elemen ...

  4. Python+Selenium学习笔记4 - submit&get_attribute

    1.submit() submit()方法用于提交表单.如在搜索框输入关键字后按回车键进行查询操作,就可用submit()方法模拟.若不能按回车键进入下一步,则不能用submit()举例,百度的查询提 ...

  5. knockoutJS学习笔记08:表单域绑定

    前面的绑定都是用在基本标签上,这章主要讲表单域标签的绑定. 一.value 绑定 绑定标签:input text.textarea. <p>用户名:<input type=" ...

  6. HTML 学习笔记 JQuery(表单,表格 操作)

    表单应用 一个表单有3个基本组成部分 (1)表单标签:包含处理表单数据所用的服务器端程序URL 以及数据提交到服务器的方法 (2)表单域:包含文本框 密码框 隐藏框 多行文本框 复选框 单选框 下拉选 ...

  7. redux-form的学习笔记二--实现表单的同步验证

    (注:这篇博客参考自redux-form的官方英文文档)左转http://redux-form.com/6.5.0/examples/syncValidation/ 在这篇博客里,我将用redux-f ...

  8. HTML学习笔记8:表单

      什么是表单?     一个网页表单可以将用户输入的数据发送到服务器进行处理.因为互联网用户使用复选框,单选按钮或文本字段填写表格,所以WebForms的形式类似文件或数据库.例如,WebForms ...

  9. PHP学习笔记 01 之表单传值

    一.HTML传值/PHP接收方法 1.GET(地址栏+问号+数据信息) (1)方式一:表单Form: method = 'get' GET接收数据方式: $_GET['表单元素name对应的值] (2 ...

随机推荐

  1. MySQL数据库干货分享!mysql每月自动创建表结构

    如果你刚好在学MySQL,博主推荐一套很详细的MySQL教程 主要详细讲解了MySQL的相关知识,包括MySQL概述,MySQL应用环境,MySQL系统特性,MySQL初学基础,MySQL管理工具,如 ...

  2. forEach和map的用法和区别

    forEach()和map()都是处理数组的高阶函数有相同的三个值:(currentValue,index,arr): currentValue:必选,当前元素的值,index:可选,当前元素的下标, ...

  3. SpringBoot的旅游项目——day01(学习记录附赠源码)

    前言 学完SpringBoot的项目,Github地址,欢迎start,一起学习! 第一天 一.技术选型 基于SpringBoot+VUE的前后端分离的仿照马蜂窝的项目. 后端选用的技术为: Spri ...

  4. CVPR2021 | 华为诺亚实验室提出Transformer in Transformer

    前言: transformer用于图像方面的应用逐渐多了起来,其主要做法是将图像进行分块,形成块序列,简单地将块直接丢进transformer中.然而这样的做法忽略了块之间的内在结构信息,为此,这篇论 ...

  5. hdu4940 有上下界的无源可行流判断

    题意:       给你一个强连通图,然后问你是否可以找到任意满足条件的集合S,S是非空集合,T是S的补集,满足sum(D[i ,j]) <= sum(D[j,i] + B[j,i]) i属于S ...

  6. .NET并发编程-TPL Dataflow并行工作流

    本系列学习在.NET中的并发并行编程模式,实战技巧 本小节了解TPL Dataflow并行工作流,在工作中如何利用现成的类库处理数据.旨在通过TDF实现数据流的并行处理. TDF Block 数据流由 ...

  7. Day007 计算器

    计算器 public static void main(String[] args) { double[] num={0,1}; String oprater="a"; doubl ...

  8. 【vue-08】vuex

    vuex的作用 简单理解,就是将多个组件共享的变量统一放到一个地方去管理,比如用户登录时的数据token. 快速上手 安装:npm install vuex 首先,我们在src文件夹下创建一个文件夹: ...

  9. Sublime 快捷生成HTML 插件安装

    更多精彩关注公众号 1 安装 Package Control1.1 ctrl + ` 呼出控制台1.2 复制(不要带最外层的双引号,该代码仅适用于sublime text 3)"import ...

  10. 依赖倒置原则(Dependence Inversion Principle)

    目录 背景 说明 例子 "倒置"的解释 总结 参考资料 背景 这几天组内的人一起学习DDD,里面再次提到了依赖倒置原则,在这学习过程中,大家又讨论了一下依赖倒置原则. 说明 采用依 ...