当前位置:   article > 正文

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

selenium 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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

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)


总结

大家喜欢的话,给个

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/489031?site
推荐阅读
相关标签