linux 视频窗口 句柄,7-多窗口、句柄(handle)

[TOC]

前言

有些页面的链接打开后,会重新打开一个窗口,对于这种情况,想在新页面上操作,就得先切换窗口了。获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了。

一、认识多窗口

1.打开赶集网:http://bj.ganji.com/,点击招聘求职按钮会发现右边多了一个窗口标签

![](https://yuedu.baidu.com/bookeditor/interface/imageview?book_id=0f6a093b7dd184254b35eefdc8d376eeaeaa17e3&file=b9dc0aae3a59c24d307151b828552712.png)

2.我们用代码去执行点击的时候,发现界面上出现两个窗口,如下图这种情况就是多窗口了。

![](https://yuedu.baidu.com/bookeditor/interface/imageview?book_id=0f6a093b7dd184254b35eefdc8d376eeaeaa17e3&file=159c99b8ea691fc4baafc7658eaa525a.png)

3.到这里估计有小伙伴纳闷了,手工点击是2个标签,怎么脚本点击就变成2个窗口了,脚本执行默认是不加载配置的,

手工点击是浏览器默认设置了新窗口打开方式为标签,这里用鼠标按住点二个标签,拖拽出来,也就变成2个标签了,是一回事。

![](https://yuedu.baidu.com/bookeditor/interface/imageview?book_id=0f6a093b7dd184254b35eefdc8d376eeaeaa17e3&file=163fd908c8a75ebfaa73e579beb6d952.png)

二、获取当前窗口句柄

1. 元素有属性,浏览器的窗口其实也有属性的,只是你看不到,浏览器窗口的属性用句柄(handle)来识别。

2. 人为操作的话,可以通过眼睛看,识别不同的窗口点击切换。但是脚本没长眼睛,它不知道你要操作哪个窗口,这时候只能句柄来判断了。

3. 获取当前页面的句柄:driver.current\_window\_handle

```

# coding:utf-8

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("http://bj.ganji.com/")

driver.implicitly_wait(10)

h = driver.current_window_handle

print(h) # 打印首页句柄

```

三、获取所有句柄

1. 定位赶集网招聘求职按钮,并点击

2. 点击后,获取当前所以的句柄:window\_handles

```

# coding:utf-8

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("http://bj.ganji.com/")

driver.implicitly_wait(10)

h = driver.current_window_handle

print(h) # 打印首页句柄

driver.find_element_by_link_text("工作").click()

all_h = driver.window_handles

print(all_h) # 打印所有的句柄

```

四、切换句柄

网上大部分教程都是些的第一种方法,小编这里新增一个更简单的方法,直接从获取所有的句柄list里面取值。

方法一:

1. 循环判断是否与首页句柄相等

2. 如果不等,说明是新页面的句柄

3. 获取的新页面句柄后,可以切换到新打开的页面上

4. 打印新页面的title,看是否切换成功

方法二:

1. 直接获取all\_h这个list数据里面第二个hand的值:all\_h\[1\]

```

# 方法一:判断句柄,不等于首页就切换

for i in all_h:

if i != h:

driver.switch_to.window(i)

print(driver.title)

# 方法二:获取list里面第二个直接切换

driver.switch_to.window(all_h[1])

print(driver.title)

```

五、关闭新窗口,切回主页

1. 打开新页面后,其实只想验证新页面跳转对不对,这里可以做个简单的验证,获取当前页面的title验证

2. 验证完后切关闭新窗口

3. 切回句柄到首页

4. 打印当前页面的句柄,看是否切换到首页了

![Snipaste_2020-08-17_09-49-31.png](https://i.loli.net/2020/08/17/2wyBuJItLprH5iW.png)

六、参考代码

```

# coding:utf-8

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("http://bj.ganji.com/")

driver.implicitly_wait(10)

h = driver.current_window_handle

driver.find_element_by_link_text("工作").click()

all_h = driver.window_handles

# 方法一:判断句柄,不等于首页就切换

'''

for i in all_h:

if i != h:

driver.switch_to.window(i)

print(driver.title)

'''

# 方法二:获取list里面第二个直接切换

driver.switch_to.window(all_h[1])

print(driver.title)

# 关闭新窗口

driver.close()

# 切换到首页句柄

driver.switch_to.window(h)

print(driver.title)

```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值