十二.python+selenium之页面句柄切换

首先了解一下句柄是什么意思?

句柄是浏览器的属性,也就是浏览器的唯一标识。类似HTML,需要用不同的属性代表不同的元素地址的定位。

那么我们在很多页面窗口打开的情况下,就需要通过句柄切换的形式来达到我们需要的页面进行元素的定位。

而如果没有页面句柄切换,只能在第一个打开的窗口页进行元素的定位。

例如:我们在bilibili进行操作,在搜索框输入selenium,点击一下搜索,然后即会弹出一个新的窗口,若需要在新窗口中点击第一个搜索到的视频进行点击播放,就必须通过页面句柄的切换来达到第二个页面的元素定位。

脚本演示如下:

#coding:utf-8
from selenium import webdriver
from time import *
bro=webdriver.Firefox()
bro.maximize_window()
bro.get('https://www.bilibili.com/')
bro.find_element_by_class_name("search-keyword").send_keys("selenium")
sleep(2)
ah = bro.current_window_handle #获取当前页面句柄
bro.find_element_by_class_name("search-keyword").submit()
sleep(2)
allh = bro.window_handles #获取所有的页面句柄
print allh,type(allh) #打印出来的句柄是以列表的形式存在,所以在访问的时候可以使用下标索引
#用for循环去找页面的第一种方法
'''
for bh in allh:
    if ah!=bh:#若页面句柄不等于第一个句柄,即相当于此时的bh已为新窗口句柄
        bro.switch_to_window(bh)#切换页面句柄时使用格式 :对象名.switch_to_window(句柄名)
bro.find_element_by_xpath(".//*[@id='server-search-app']/div[2]/div[2]/div/div[2]/ul[4]/li[1]/a/div/div[1]/img").click()
'''
#用下标索引去做的第二种方法
bro.switch_to_window(allh[1])#切换到第二个页面
bro.find_element_by_xpath(".//*[@id='server-search-app']/div[2]/div[2]/div/div[2]/ul[4]/li[1]/div/div[1]/a").click()
sleep(5)
bro.quit()

总结:

1.切换页面句柄时使用格式:对象名.switch_to_window(句柄变量名)

猜你喜欢

转载自blog.csdn.net/Static_at/article/details/81119277