惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Proofpoint News Feed
D
DataBreaches.Net
D
Docker
云风的 BLOG
云风的 BLOG
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
罗磊的独立博客
Martin Fowler
Martin Fowler
U
Unit 42
Engineering at Meta
Engineering at Meta
IT之家
IT之家
Vercel News
Vercel News
B
Blog RSS Feed
人人都是产品经理
人人都是产品经理
博客园 - Franky
博客园 - 【当耐特】
Stack Overflow Blog
Stack Overflow Blog
G
Google Developers Blog
MongoDB | Blog
MongoDB | Blog

博客园 - Chen.HJ

python用正则对字符串进行运算 Nginx安装和遇到过的坑 Redis安装与常用命令 Nginx、Tomcat和Redis配置文件说明 python + selenium 获取标签文本的为空解决办法 Python读取Excel Python使用paramiko的SFTP get或put整个目录 Linux系统性能监控工具nmon python+selenium个人学习笔记11-登录封装与调用 python+selenium+unittest测试框架4-邮件发送最新测试报告 python+selenium+unittest测试框架3-项目构建和发送邮件 python+selenium+unittest测试框架2-装饰器@classmethod python+selenium+unittest测试框架1-unittest单元测试框架和断言 python+selenium个人学习笔记10-调用JavaScript和截图 python+selenium个人学习笔记9-文件上传和cookie操作 python+selenium个人学习笔记8-获取信息和勾选框 python+selenium个人学习笔记7-警告框处理和下拉框选择 python+selenium个人学习笔记6-元素等待 python+selenium个人学习笔记4-鼠标和键盘操作
python+selenium个人学习笔记5-多窗口和多表单切换
Chen.HJ · 2018-03-05 · via 博客园 - Chen.HJ

多窗口和多表单

一、多窗口

在实际操作中,有些页面的链接点击会弹出一个新的窗口。这时候如果需要到新的窗口上进行操作,就需要学会窗口切换了。

1、获得当前窗口句柄:

driver.current_window_handle

2、获取当前所有的句柄:

3、切换到相应的窗口:

driver.switch_to.window()

示例:

from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
#获取当前窗口句柄
sreach_windows = driver.current_window_handle
driver.find_element_by_link_text('登录').click()
sleep(2)
driver.find_element_by_link_text("立即注册").click()
# 获得当前所有打开的窗口的句柄
all_handles = driver.window_handles
#判断句柄是不是首页句柄
for handle in all_handles:
    if handle != sreach_windows:
        # sleep(5)
        # driver.switch_to.window(sreach_windows)#不是,切换到首页
        sleep(5)
        driver.switch_to.window(handle)#不是,切换到注册页面
        sleep(5)
driver.quit()

二、多表单

在Web应用中经常会遇到frame/iframe表单嵌套页面的应用,Frame与Iframe两者可以实现的功能基本相同,不过frame是整个页面的框架,iframe是内嵌的网页元素。WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位。

1、切换iframe

switch_to.frame() 默认可以直接取表单的id 或name属性。如果iframe没有可用的id和name属性,则可以通过下面的方式进行定位。

x_frame = driver.find_element_by_xpath("//*[@id="9"]")
driver.switch_to.frame(x_frame)

2、释放iframe

driver.switch_to.default_content()

示例:

from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get("http://mail.163.com/")
sleep(2)
# 切换iframe
driver.switch_to.frame("x-URS-iframe")
driver.find_element_by_name("email").send_keys("chen")
driver.find_element_by_name("password").send_keys("chen")
# 释放iframe
driver.switch_to.default_content()
sleep(5)