Python + Selenium 小技巧之切换浏览器窗口

Python + Selenium 小技巧之切换浏览器窗口

浏览器大多页面中的链接,点击后就会打开一个新的窗口,这时就需要把窗口切换过去,才能继续执行相关的操作。

这里为了演示方便,我们预先通过执行js来新建出几个窗口。

import time
from selenium import webdriver

browser = webdriver.Chrome()
js = 'window.open("https://cn.bing.com/");'
browser.execute_script(js)

因为每个窗口都有一个句柄(handle),代表当前窗口,需要操作哪个页面的窗口,切换到窗口对应的句柄。

思路一:通过句柄来切换窗口

import time
from selenium import webdriver

browser = webdriver.Chrome()
# 在当前浏览器中访问网易邮箱
browser.get('https://www.126.com')

# 新开一个窗口,通过执行js来新开一个窗口
js = 'window.open("https://cn.bing.com/");'
browser.execute_script(js)

time.sleep(5)

# 输出当前窗口句柄(网易邮箱)
Netease_handle = browser.current_window_handle

# 获取当前窗口句柄集合(列表类型)
handles = browser.window_handles
print(handles)  # 输出句柄集合
# ['CDwindow-E9B85270B51D42AF7369D81B9AA70FFE',
# 'CDwindow-90004FD79A0F59EE057846B34D0E7327']

# 获取必应窗口
bing_handle = None
for handle in handles:
    if handle != Netease_handle:
        bing_handle = handle

print('switch to ', handle) # 输出当前窗口句柄(必应)
browser.switch_to.window(Netease_handle)
time.sleep(3)
browser.close() # 关闭当前窗口(必应)

# 切换回网易邮箱窗口
browser.switch_to.window(bing_handle)

time.sleep(3)
browser.quit()

思路二:根据浏览器页签title进行窗口切换

其实这种方法也用到了句柄,与前面不同的是,这里使用了浏览器页签的title

import time
from selenium import webdriver

browser = webdriver.Chrome()
# 在当前浏览器中访问网易邮箱
browser.get('https://www.126.com')

# 新打开两个窗口
js = 'window.open("https://www.qq.com/");'
browser.execute_script(js)
time.sleep(1)
js = 'window.open("https://cn.bing.com/");'
browser.execute_script(js)
time.sleep(5)

# 拿到所有的窗口
allHandles = browser.window_handles
# 根据窗口的title进行URL切换
for handle in allHandles:
    if browser.title.find("腾讯") == -1:
        browser.switch_to_window(handle)

time.sleep(3)
browser.quit()

注:在find()方法中填写的Title,只需填入浏览器页签的部分Title内容即可。例如本例中为了切换至https://www.qq.com/页面,其全称实际是腾讯首页,但这里只输入腾讯即可。


文章作者: &娴敲棋子&
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 &娴敲棋子& !
评论
  目录