为了账号安全,请及时绑定邮箱和手机立即绑定

如何解决Selenium句柄、多窗口问题

标签:
Html/CSS

有时我们在打开浏览器浏览网页时,当点击网页上某些链接时,它不是直接在当前页面上跳转,而是重新打开一个新标签页面,对于这种情况,想在新页面上操作,就得先切换窗口了。获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了。

一、认识多窗口

1、这里以赶集网为例,打开赶集网http://cd.ganji.com/,点击工作,就会发现会重新打开一个窗口;

webp

image

二、获取当前窗口句柄

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

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

3.获取当前页面的句柄:browser.current_window_handle

webp

image

4.执行结果

webp

image

三、获取所有窗口句柄

1、获取所有窗口句柄:brows.window_handles

webp

image

2、执行结果

webp

image

四、切换句柄

方法一:

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

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

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

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

webp

image

执行结果

webp

image

方法二:

直接获取all_h这个list数据里面第二个hand的值:all_h[i]

webp

image

执行结果

webp

image

五、关闭新窗口,返回到原来的窗口

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

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

3.切回句柄到首页;

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

webp

image

执行结果

webp

image

六、参考代码

#!/usr/bin/env python# -*- coding: utf-8 -*-# @File    : handles.py# @Software: PyCharmimport timefrom selenium import webdriver
url = 'http://cd.ganji.com/'browser = webdriver.Firefox()
browser.get(url)
time.sleep(5)# 获取当前页面的窗口句柄handle = browser.current_window_handle
print(handle)# 获取所有窗口句柄browser.find_element_by_link_text('成都招聘').click()
handles = browser.window_handles
print(handles)# 方法一:判断句柄是否与首页相等for i in handles:    if i != handle:
        browser.switch_to.window(i)
        print(browser.title)
        browser.close()
        browser.switch_to.window(handle)
        print(browser.title)# 方法二:直接获取list列表里面的值,取值handles[i]# browser.switch_to.window(handles[0])# print(browser.title)# 退出browser.quit()



作者:TeacherAilie
链接:https://www.jianshu.com/p/b60aa3a6e0ca


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消