A页面的链接打开后,会重新打开一个B窗口,想在新页面B上操作,就得先切换窗口了。获取窗口的唯一标识用句柄表示,所以只需要切换句柄,这样就能在多个页面上操作了
HANDLE句柄是Windows操作系统中的一个概念。在Windows程序中,有各种各样的资源(窗口、图标、光标等),系统在创建这些资源时会为它们分配内存,并返回标示这些资源的标示号,即句柄。句柄指的是一个核心对象在某一个进程中的唯一索引,而不是指针。由于地址空间的限制,句柄所标识的内容对进程是不可见的,只能由操作系统通过进程句柄列表来进行维护。句柄列表:每个进程都要创建一个句柄列表,这些句柄指向各种系统资源,比如信号量,线程和文件等,进程中的所有线程都可以访问这些资源。(此段来源于网络)
获取所有窗口句柄:driver.window_handles
获取当前窗口的句柄:driver.current_window_handle
切换窗口:driver.switch_to.window(handle)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from selenium import webdriver
import time
options = webdriver.ChromeOptions()
prefs = {
'profile.default_content_setting_values':
{
'notifications': 2
}
}
options.add_experimental_option('prefs', prefs) # 关掉浏览器左上角的通知提示
options.add_argument("disable-infobars") # 关闭'chrome正受到自动测试软件的控制'提示
driver = webdriver.Chrome(chrome_options=options)
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("https://blog.csdn.net/jusulysunbeamy")
driver.find_element_by_xpath('//*[@id="uid"]').click() # 点击左上角图片旁边的'酷酷木女侠'几个字
time.sleep(3) # 等待3秒
# 页面已经跳转到了新的页面 https://me.csdn.net/jusulysunbeamy
hands = driver.window_handles # 获取所有的句柄
driver.switch_to.window(hands[-1]) # 直接获取hands这个list数据里面最后1个hand的值,切换到最后一个窗口
driver.find_element_by_xpath('/html/body/div[2]/div[1]/div/div[1]/div/a[2]/label/span').click() # 点击页面上的'资源'
time.sleep(3) # 等待3秒
time.sleep(5)
driver.quit()