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

【Python】Selenium切换网页的标签页的写法(全!!!)

在使用selenium做网站爬取测试的时候,我们经常会遇到一些需要点击的元素,才能点击到我们想要进入的页面,

于是我们就要模拟 不断地 点点点击 鼠标的样子。

这个时候网页上就会有很多的标签页,你的浏览器网页标签栏 be like:
你的

那么,怎么切换页面,并返回到上一页呢?

  1. 打包切换页面的逻辑
def switch_windows(index):#获取当前句current_window_handle = driver.current_window_handleprint(current_window_handle )#获取所有句柄all_handles = driver.window_handlesprint(all_handles )#切换至第二个窗口driver.switch_to.window(all_handles [index])print(driver.title) #获取目前内容页的信息
  1. 点击按钮跳到下一页 --> 切换到新页面 -->操作新页面内容 --> 返回上一页
#点击按钮,跳转到下一个页面
element=driver.find_element(By.XPATH,input_)
element.click()#切换到最后一个页面-新页面
switch_windows(index=-1)#读取页面的信息
sleep(1)
page_html=driver.page_source  
page_soup=BeautifulSoup(page_html,'lxml') #返回首页
switch_windows(index=0)

除了用点击到下一页的方法,也可以模拟标签点开的方法(强推!!!好用)

原理是,网页模拟点开标签,然后把网址输入进去的过程

driver.execute_script("window.open('https://www.google.com')")  # 新标签页1
driver.execute_script("window.open('https://www.python.org')")  # 新标签页2
  1. 返回首页以后,我们要把后面不用的其他标签页关闭掉:
# 获取所有标签页的句柄(handles)
all_handles = driver.window_handles  # 返回所有标签页的ID列表
homepage_handle = all_handles[0]  # 首页通常是第一个标签页# 关闭其他标签页(保留首页)
for handle in all_handles:if handle != homepage_handle:  # 如果不是首页driver.switch_to.window(handle)  # 切换到该标签页driver.close()  # 关闭它# 最后切换回首页
driver.switch_to.window(homepage_handle)print("已关闭其他标签页,仅保留首页")
  1. 如果不确定在读取页面的时候,是不是读取到自己想要的那个网址,可以使用读取网址的方式判断:
print("当前页面URL:", driver.current_url)

也可以跟自己的目标网址做判断,如果不对的话,则切换到上一个界面

current_url=    driver.current_url
if current_url != target_url:switch_windows(index=-2) #比最后一个网址再上一个页面

这部分内容在【返回首页】的代码之前,效果如:
在这里插入图片描述

PS:

一些网站的HTML内部会设置一些【点击事件处理属性】,

当用户点击这个元素时,会触发 onclick 中定义的 JavaScript 代码,类似下面的代码。

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

这种可能就要点击网页上的元素,才能获取网络响应,直接跳转到该网址上,是行不通的,可能会被发现爬虫,然后强制跳转到其他的网页页面上。

这个时候,只能用上面的方法了。

如果有更好的方法,可以解决如上的问题的话,希望大家可以提出来呀,感谢不尽!!

http://www.xdnf.cn/news/79777.html

相关文章:

  • 力扣hot100 LeetCode 热题 100 Java 哈希篇
  • Spring之我见 - Spring MVC重要组件和基本流程
  • N8N 官方 MCP 节点实战指南:AI 驱动下的多工具协同应用场景全解析
  • 多台电脑切换解决方案:KVM 切换器
  • 小技巧1,在vue3中利用自定义ref实现防抖(customRef)
  • 晨控CK-FR12与欧姆龙NX系列PLC配置EtherNet/IP通讯连接操作手册
  • C++_并发编程_thread_01_基本应用
  • LoRA微调技术全景解析:大模型高效适配的革新之道
  • 【RuleUtil】适用于全业务场景的规则匹配快速开发工具
  • ffmpeg 硬解码相关知识
  • spark-SQL实验
  • 川翔云电脑32G大显存集群机器上线!
  • 进阶篇 第 6 篇:时间序列遇见机器学习与深度学习
  • 考研单词笔记 2025.04.22
  • 安宝特科技 | AR眼镜在安保与安防领域的创新应用及前景
  • 企业战略到数字化落地 —— 第三章 数字化架构
  • 快速定位达梦缓存的执行计划并清理
  • 基于大疆行业无人机的特色解决方案-无线通信篇:基于蜂窝以及自组网MESH的无线通信C2链路
  • Web3实战:从零开发你的ERC20代币合约
  • 在 master 分支上进行了 commit 但还没有 push,怎么安全地切到新分支并保留这些更改
  • 使用 LangChain + Higress + Elasticsearch 构建 RAG 应用
  • WebRTC服务器Coturn服务器中的通信协议
  • 进阶篇 第 2 篇:自相关性深度解析 - ACF 与 PACF 图完全指南
  • 云原生--基础篇-3--云原生概述(云、原生、云计算、核心组成、核心特点)
  • 2025.04.22【Sankey】流图分析技巧与应用
  • 设备制造行业如何避免项目管理混乱?
  • 【人脸识别】百度人脸识别H5方案对接
  • 表格识别版面还原分析-GO语言集成-表格文字识别接口
  • AutoJs相关学习
  • 国家自然科学基金答辩ppt制作案例模板下载