『python爬虫』23. selenium之窗口切换与iframe(保姆级图文)

news2024/11/24 14:32:47

目录

  • 1. 窗口切换
  • 2. 抓取拉勾网职务信息
    • 2.1 拉勾网查看职务详情与价格
    • 2.2 完整代码
  • 3. iframe的处理
    • 总结


欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中

1. 窗口切换

窗口句柄的定义:WebDriver对象有window_handles 属性,是列表对象, 里面包括了当前浏览器里面 所有的窗口句柄,即每个窗口对应唯一ID。通过窗口句柄判断窗口一一对应。

web = Chrome() #新建驱动对象

获取所有窗口句柄(列表)
wins =web.window_handles
句柄的顺序:先出现的先加入列表。最后出现的,最后加入列表。

最新窗口:列表的最后一个!也就是序列的 -1 位置
web.window_handles[-1]
最老的窗口:
web.window_handles[0]

切换窗口 web.switch_to.window(窗口句柄)
web.switch_to.window(web.window_handles[-1]) #切换到最新的窗口
web.switch_to.window(web.window_handles[0]) #切换到最老的窗口

窗口切换:在selenium的眼中. 新窗口默认是不切换过来的,虽然你看上去好像我们显示的窗口切换过去了,但是实际上代码程序没有切换过去。不是显示浏览器中当前在哪个窗口就已经切换到哪个窗口,我们必须要通过代码执行窗口切换

窗口标题
web.title


2. 抓取拉勾网职务信息

2.1 拉勾网查看职务详情与价格

我们这里的代码仅供学习参考,只能爬取一个职位信息,请大家合理使用,自行结合for循环等内容。

  • click掉开头的弹窗切换到北京城市 xpath //*[@id="changeCityBox"]/ul/li[1]/a
    在这里插入图片描述
  • 在搜索框中输入 python 关键词搜索 xpath //*[@id="search_input"]
    在这里插入图片描述
  • 点击第一个职务信息 xpath//*[@id="openWinPostion"]
    在这里插入图片描述
  • 切换到新窗口,抓取职务信息 xpath //*[@id="job_detail"]/dd[2]/div
    在这里插入图片描述
  • 关闭子窗口,切换到老窗口,抓取薪资待遇 xpath //*[@id="jobList"]/div[1]/div[1]/div[1]/div[1]/span/div/div[2]/span
    在这里插入图片描述

2.2 完整代码

在这里插入图片描述

from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
import time
web = Chrome()

web.get("http://lagou.com")

web.find_element_by_xpath('//*[@id="cboxClose"]').click()

time.sleep(1)

web.find_element_by_xpath('//*[@id="search_input"]').send_keys("python", Keys.ENTER)

time.sleep(1)

# 打开我们第一个职位的详情界面
web.find_element_by_xpath('//*[@id="openWinPostion"]').click()

# 如何进入职务详情的窗口中进行提取
# 注意, 在selenium的眼中. 新窗口默认是不切换过来的,需要我们手动切换(最新的窗口 -1)
web.switch_to.window(web.window_handles[-1])
print("切换(最新的窗口 -1)",web.title)

# 在新窗口中提取内容
job_detail = web.find_element_by_xpath('//*[@id="job_detail"]/dd[2]/div').text
print("job_detail:\n"+job_detail)

# 关掉子窗口
web.close()
# 变更selenium的窗口视角. 回到原来的职务表窗口(最老的窗口 索引0)
web.switch_to.window(web.window_handles[0])
print("切换(最老的窗口 0)",web.title)
price=web.find_element_by_xpath('//*[@id="jobList"]/div[1]/div[1]/div[1]/div[1]/span/div/div[2]/span').text
print("price:\n"+price)

3. iframe的处理

有些视频网站的网页或是登录是出现的弹窗,是嵌套了iframe 。0基础小白理解为网页中的网页(不太准确的理解),我们需要像窗口切换一样,切换到对应的iframe(某种程度上也理解为一种窗口)

根据索引切换iframe
driver.switch_to.frame(0)
适用场景:你确定只有一个iframe(不要数错了) 或者是你很确定知道ifarme的索引值(很多时候都是你以为你知道,数错了)

根据ifarme的name属性定位
driver.switch_to.frame(“iframe的name属性”)

根据iframe对象切换,通过xpath找到iframe对象
iframe = driver.find_element(‘xpath’, ‘//div/div/iframe’)
driver.switch_to.frame(iframe)


总结

大家喜欢的话,给个👍,点个关注!给大家分享更多计算机专业学生的求学之路!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2023 mzh

Crated:2023-3-1

欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中
『未完待续』


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/535116.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

肝一肝设计模式【八】-- 外观模式

系列文章目录 肝一肝设计模式【一】-- 单例模式 传送门 肝一肝设计模式【二】-- 工厂模式 传送门 肝一肝设计模式【三】-- 原型模式 传送门 肝一肝设计模式【四】-- 建造者模式 传送门 肝一肝设计模式【五】-- 适配器模式 传送门 肝一肝设计模式【六】-- 装饰器模式 传送门 肝…

Windows本地快速搭建SFTP文件服务器,并端口映射实现公网远程访问

文章目录 1. 搭建SFTP服务器1.1 下载 freesshd服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内网连接测试成功 3 使用cpolar内网穿透3.1 创建SFTP隧道3.2 查看在线隧道列表 4. 使用SFTP客户端&#xff0…

ChatGPT 和 Elasticsearch:使用 ChatGPT 处理 Elastic 数据的插件

作者:Baha Azarmi 你可能已经阅读过这篇关于我们将 Elasticsearch 的相关性功能与 OpenAI 问答功能相结合的博文。 该帖子的主要思想是说明如何将 Elastic 与 OpenAI 的 GPT 模型结合使用来构建响应并向用户返回上下文相关的内容。 我们构建的应用程序可以公开一个…

好久不见,甚是想念

大家好,我是程序员小哈。 一晃停更好久了,之前因为12月份阳了,身体一直感觉没有完全恢复,就一直偷懒了,外加单位的事情比较多,实在是分身乏术,最近总算是告一段落了,咱们的知识分享…

shell脚本——流编辑器“三剑客”之sed命令

shell脚本——流编辑器“三剑客”之sed命令 一、流编辑器“三剑客”二、sed编辑器1、sed的工作流程2、命令格式3、常用选项4、常用操作5、打印内容6、使用地址7、删除行8、替换9、插入 一、流编辑器“三剑客” sed awk grep 二、sed编辑器 sed是一种流编辑器,流编…

手把手项目实战,搞完,直接写在简历上!

大家好,我是田哥 很多没有项目经验,或者没有亮点项目的朋友可以看过来。 最近田哥在搞一个项目:充电桩项目。本文给大家介绍这个项目背景、部分原型图、核心功能、核心模块、技术栈等。 项目背景介绍 随着我国汽车行业的不断发展&#xff0c…

AI绘画-Midjourney基础1-基本操作

Midjourney是一款 AI 绘画工具,可以根据你的提示(本文中称为 prompt)创作出各种图像。你只需要在Discord上和一个机器人聊天,就可以用简单的命令来控制它。目前已不支持免费试用,可以选择付费计划来获得更多功能和优势…

Ae 效果详解:Roto 笔刷和调整边缘

使用 Roto 笔刷工具或调整边缘工具之后,Ae 会向图层应用“Roto 笔刷和调整边缘” Roto Brush & Refine Edge效果。 版本 Version 目前包括 1.0(经典)1.0 Classic和 2.0 两个版本。 品质 Quality 选择围绕边缘的细节质量。 --标准 Stan…

传输时延和传播时延(补充:频段,信道带宽,数据速率的区别,以及帧大小和帧长)

先来看例题,看是否能区分 例题1: 假设生产管理网络系统采用B/S工作方式,经常上网的用户数为150个,每用户每分钟产生8个事务处理任务,平均事务章大小为0.05MB,则这个系统需要的信息传输速率为(68)。 (68)A…

Node接入ChatGPT 的最强对手Claude

由于个人的chatGPT免费版本即将到期, Claude 很火,在网上被说成是 ChatGPT 的最强对手,是 ChatGPT 的替代品。本文我将介绍下 Claude 是什么,以及如何免费使用 Claude. 什么是Claude 看一下它是如何自我介绍的 Slack Slack 是一款流行的团…

在 Transformers 中使用对比搜索生成可媲美人类水平的文本

1. 引言 自然语言生成 (即文本生成) 是自然语言处理 (NLP) 的核心任务之一。本文将介绍神经网络文本生成领域当前最先进的解码方法 对比搜索 (Contrastive Search)。提出该方法的论文 “A Contrastive Framework for Neural Text Generation” 最初发表于 NeurIPS 2022 ([论文]…

目标检测创新:一种基于区域的半监督方法,部分标签即可(附原论文下载)...

关注并星标 从此不迷路 计算机视觉研究院 公众号ID|ComputerVisionGzq 学习群|扫码在主页获取加入方式 论文地址:https://arxiv.org/pdf/2201.04620v1.pdf 计算机视觉研究院专栏 作者:Edison_G 研究表明,当训练数据缺少…

招募:AICG内容联合创作计划 | AIGC实践

AIGC(AI Generated Content,人工智能自动生成内容)必将成为小微创业团队进行低成本内容运营的最佳实践。 你同意这个观点吗? 如果我们恰好想法一致,或许可以一起搞点事情,探索一下商业场景下,应…

ChatGPT prompt指令大全

ChatGPT prompt指令大全 更多Prompt自动使用,可以在chrome插件中搜索 WebChatGPT,没有账号的,可以拉到文章最下面。 目录 担任雅思写作考官 写小说 充当 Linux 终端 充当英语翻译和改进者 充当论文润色者(拿摘要部分举例&am…

企业实践 | 如何从VMWare ESXi Shell中挂载以及拷贝NTFS或者FAT32分区格式的USB闪存驱动器...

欢迎关注「WeiyiGeek」公众号 点击 👇 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习! 涉及 网络安全运维、应用开发、物联网IOT、学习路径 、个人感悟 等知识 “ 花开堪折直须折,莫待无花空折枝。 ”…

K_A39_004 基于STM32等单片机驱动AT24C02模块 串口+OLED0.96显示

K_A39_004 基于STM32等单片机驱动AT24C02模块 串口OLED0.96显示 所有资源导航一、资源说明二、基本参数参数引脚说明 三、驱动说明时序对应程序: 四、部分代码说明1、接线引脚定义1.1、STC89C52RCAT24C02模块1.2、STM32F103C8T6AT24C02模块 五、基础知识学习与相关资料下载六、…

〖技术人必学的职业规划白宝书 - 职业规划篇②〗- 进入职场前必须要考虑的问题

历时18个月,采访 850 得到的需求。 不管你是在校大学生、研究生、还是在职的小伙伴,该专栏有你想要的职业规划、简历、面试的答案。说明:该文属于 技术人必学的职业规划白宝书 专栏,购买任意白宝书体系化专栏可加入TFS-CLUB 私域社…

如何优雅的使用各类LLM

近几个月,随着ChatGPT的风靡,大型语言预训练模型也如雨后春笋般地涌现,虽然效果差强人意,好在不受限制。配置稍好的电脑也能跑个7B、13B参数的大语言模型。 虽然模型众多,但是如果给每一个模型都单独去配置环境&#x…

Go语言的条件判断和循环语句

目录 【if语句】 if语句的内部变量 if语句的优雅写法 【switch语句】 switch语句的特点 switch语句的表达式类型 switch获取变量类型 x.(type) 【for语句】 for语句的变体 for...range break 和 continue goto for 语句的常见“坑”与避坑方法 Go语言的条件判断有…

数组map用法以及特殊值的情况

数组map用法以及特殊值的情况 一、map用法的说明 map(callbackFn, thisArg); // callbackFn回调函数,thisArg可选 callbackFn是个回调函数,该回调函数的参数按照顺序为element(当前正在处理的元素),index&#xff0…