版权声明:本文为优快云博主「药药君」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/Static_at/article/details/81119277
首先了解一下句柄是什么意思?
句柄是浏览器的属性,也就是浏览器的唯一标识。类似HTML,需要用不同的属性代表不同的元素地址的定位。
那么我们在很多页面窗口打开的情况下,就需要通过句柄切换的形式来达到我们需要的页面进行元素的定位。
而如果没有页面句柄切换,只能在第一个打开的窗口页进行元素的定位(即句柄可以使我们不用在当前页面打开链接而是跳转至新页面打开链接)。
例如:我们在bilibili进行操作,在搜索框输入selenium,点击一下搜索,然后即会弹出一个新的窗口,若需要在新窗口中点击第一个搜索到的视频进行点击播放,就必须通过页面句柄的切换来达到第二个页面的元素定位。
代码示例:
#coding:utf-8
import selenium
from selenium import webdriver
from time import *
bro=webdriver.Chrome()
bro.maximize_window()
bro.get('https://www.bilibili.com/')
bro.find_element_by_xpath("//input[@class='nav-search-keyword']").send_keys("selenium")
sleep(2)
ah = bro.current_window_handle #获取当前页面句柄
bro.find_element_by_xpath("//input[@class='nav-search-keyword']").submit()
sleep(5)
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("//ul[@type='video']/child::li[1]/div/div[1]/a").click()
sleep(3)
bro.quit()