当前位置: 首页 > news >正文

学习Python中Selenium模块的基本用法(15:窗口操作)

  采用Selenium模块在浏览器中打开页面后,点击页面中的链接或按钮时新建标签页并跳转过去,此时想要切换回之前页面的话,可以使用窗口句柄功能。
使用Selenium模块打开的每个页面都对应唯一的窗口句柄,采用driver.current_window_handle能够获取当前页面的窗口句柄,调用driver.switch_to.window函数可以切换到指定窗口句柄对应的页面。

  以百度搜索验证窗口句柄功能,打开百度网站并搜索内容,点击第一个搜索结果后又返回百度搜索页面,示例代码及运行效果如下所示:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import timedriver = webdriver.Chrome()
driver.get("https://www.baidu.com")time.sleep(2)search_box =driver.find_element(By.ID, "chat-textarea")   # 百度搜索框的ID为"kw"
search_box.send_keys("DeepSeek官网")
search_box.send_keys(Keys.RETURN)time.sleep(3)curWinHandle=driver.current_window_handlefirst_result = driver.find_element(By.CLASS_NAME, "sc-link")
first_result.click()time.sleep(3)driver.switch_to.window(curWinHandle)

在这里插入图片描述

  除了上述获取并切换窗口句柄的属性和函数,Selenium模块还提供以下与窗口句柄相关的属性或函数:
1)window_handles:获取浏览器当前所有的窗口句柄;
2)close():关闭当前窗口;
3)quit():关闭所有关联窗口并终止WebDriver会话;
4)switch_to.new_window(type_hint):创建一个新窗口或标签页并自动切换过去,type_hint可为’tab’或’window’,仅Selenium 4及以上版本支持该函数。

  Selenium官网文档中说没有区分窗口和标签页,但是switch_to.new_window函数的输入参数却区分了标签页(tab)和窗口(window),经测试,如果输入参数是tab,是在当前浏览器中创建新的标签页,如果输入参数是window,则会新打开一个浏览器并在浏览器中打开指定的网址。测试代码及运行效果如下所示:

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")time.sleep(2)driver.switch_to.new_window('tab')
driver.get("https://mail.163.com/")time.sleep(2)driver.switch_to.new_window('window')
driver.get("https://mail.qq.com/")for window_handle in driver.window_handles:driver.switch_to.window(window_handle)print(driver.title)

在这里插入图片描述
在这里插入图片描述

参考文献:
[1]https://www.selenium.dev/zh-cn/
[2]https://www.selenium.dev/zh-cn/documentation/webdriver/getting_started/
[3]https://blog.csdn.net/kk_lzvvkpj/article/details/148610502
[4]https://registry.npmmirror.com/binary.html?path=chromedriver/
[5]https://chromedriver.chromium.org/

http://www.dtcms.com/a/392313.html

相关文章:

  • 能力(1)
  • UE4/UE5 如何迁移HotPatcher插件
  • SQL从入门到起飞:完整数据库操作练习
  • MyBatis 从入门到进阶:数据库操作全指南
  • spring cloud 同一服务多实例 websocket跨实例无法共享Session 的解决
  • 如何通过pycharm使用AutoDL服务器
  • 【Linux】4G网卡-AT命令
  • 新版本附近停车场推荐系统demo,基于python+flask+协同推荐+空车位识别+yolov人工智能开发,开发语言python,数据库mysql
  • 《UE5_C++多人TPS完整教程》学习笔记55 ——《P56 网络更新频率(Net Update Frequency)》
  • 华为鸿蒙 ArkTS 实战:基于 RelationalStore 的 SQLite 实现本地数据持久化
  • 流行的 3D 文件格式及其用途指南
  • 腾讯发布一站式工作平台“混元3D Studio
  • TGRS2025 | 视觉语言模型 | 文本驱动自适应网络实现高光谱跨场景零样本分类
  • PyQt6之选项卡示例
  • 研学小程序前端平台开发项目需求规格说明书
  • 【Linux】netplan配置网络;ntp搭建时间服务器;shc将脚本转二进制;ty0tty创建虚拟串口
  • C# ADO.NET 操作学习记录
  • PIT 定时器寄存器配置
  • 算法代码讲座6:最小二乘法理论原理、典型案例与MATLAB实现
  • 【深入浅出】交叉熵损失函数——原理、公式与代码示例
  • Vue实现路由守卫
  • Coze源码分析-资源库-删除工作流-前端源码-核心接口
  • 安踏集团 X OB Cloud:新零售创新如何有“底”和有“数”
  • Web3艺术品交易应用方案
  • Spring 事务管理详解:保障数据一致性的实践指南
  • 软考中级-软件设计师 答题解题思路
  • Java IDEA学习之路:第二周课程笔记归纳
  • SQL语句一文通
  • Ubuntu22.04 双显卡系统使用集显 DRM 渲染的完整流程记录
  • Coze源码分析-资源库-删除工作流-后端源码-IDL/API/应用/领域