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

news/2024/7/19 11:39:09 标签: python, 爬虫, selenium

目录

  • 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 完整代码

在这里插入图片描述

python">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.niftyadmin.cn/n/330527.html

相关文章

LLM大模型开源案例集,需带有:数据集+模型微调+项目代码(三)

文章目录 1 ChatGLM-Med: 基于中文医学知识的ChatGLM模型微调1.1 数据集1.2 ChatGLM+P-tuning V2微调1.3 Llama + Alpaca的Lora微调版本2 LawGPT_zh:中文法律大模型(獬豸)2.1 数据集2.1.1 利用ChatGPT清洗CrimeKgAssitant数据集得到52k单轮问答:2.1.2 带有法律依据的情景问…

大模型训练数据多样性的重要性

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

【ARMv8 编程】A64 流控制指令

A64 指令集提供了许多不同种类的分支指令。对于简单的相对分支,即那些从当前地址偏移的分支,使用 B 指令。无条件简单相对分支可以从当前程序计数器位置向后或向前分支最多 128MB。 有条件的简单相对分支,其中条件代码附加到 B,具…

【K8s】安全认证与DashBoard

文章目录 一、概述1、客户端2、认证、鉴权与准入控制 二、认证管理1、认证方式2、HTTPS证书认证 三、授权管理1、授权与RBAC2、Role 与 ClusterRole3、RoleBinding 与 ClusterRoleBinding4、案例:创建一个只能管理dev空间下Pods资源的账号 四、准入控制五、DashBoar…

MADDPG-学习笔记(1)

文献链接:https://arxiv.org/abs/1706.02275 "Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments"(作者:Lowe, Ryan等人,2017年) 环境搭建:https://zhuanlan.zhihu.co…

【数据库】存储过程

存储过程/函数:procedure/function 通俗说,存储过程是个模块化的程序段,完成一定功能,可被反复调用,可用于解决复杂的问题,减少程序冗余度。 这里的过程和函数就是C语言的方法/函数。过程一般不直接返回值,但可以通过实参和形参返回给主调程序计算结果;函数在SQLSERV…

红黑树封装map和set

文章目录 红黑树封装map和set1. 改良红黑树1.1 改良后的节点1.2 改良后的类分别添加仿函数代码 3. 封装map和set3.1 set3.2 map 3. 迭代器3.1 begin 和 end3.2 operator()和operator--()3.3 const迭代器set的迭代器map的迭代器 4. map的operator[]的重载5. 完整代码实现5.1 RBT…

IPWorks EDI 2022 .NET Edition 22.0.8 Crack

IPWorks EDI基于用于安全 EDI 通信(AS2、SFTP、OFTP、RosettaNet、MLLP 等)的领先 EDI-INT 协议,IPWorks EDI 库包含促进安全 EDI 消息传递以及 EDI 映射、翻译和验证(X12、 EDIFACT、HL7、TRADACOMS、VDA、XML 和 JSON&#xff0…