[frame操作]获取网易云音乐内今日飙升榜歌单
一、frame概述
(1)使用frame可以实现同一窗口中显示不止一个页面。在web应用中,前端网页设计会用到iframe/frame表单嵌套页面的应用,一个页面嵌套多个HTML/JSP文件。且嵌套的HTML是独立使用互不影响的,经常出现在网页中的导航。
(2)selenium webdriver只能在同一页面识别定位元素,只能识别当前所在位置的页面上的元素。
(3)frame相关标签有三种:frameset、frame、iframe
- \<frameset>框架结构标签,定义如何将窗口分割为框架;每个frameset定义了一系列行或列;rows/columns的值规定了每行或每列占屏幕的面积。
- \<frame>框架标签,定义了放置在每个框架中的HTML文档。
- \<iframe>用于在网页内显示网页
二、实操
(1)搜索框中搜索frame,查看网页是否使用了frame方案。
使用switch_to.frame('id值或name'/函数)方法先切入到该层后再对该层元素进行操作。
- switch_to.frame('指定'):切到指定frame层,可以‘id或name’(str)、
index(int)、元素(element)定位方法find_element_by_属性;
- switch_to.parent_frame():切到父级frame,即切到上一层;
- switch_to.default_content():切到主文档,即第一层HTML。
(2)获取网易云音乐内今日飙升榜歌单。
1 #爬出飙升榜歌曲和歌手 2 from selenium import webdriver 3 import time 4 import xlwt 5 wbd = webdriver.Chrome() 6 wbd.get('https://music.163.com/') 7 8 wbd.find_element_by_css_selector('#g_nav2 > div > ul > li:nth-child(2) > a').click() 9 time.sleep(5) 10 wbd.switch_to.frame('g_iframe') 11 time.sleep(5) 12 w1=wbd.find_element_by_css_selector('h2.f-ff2') 13 title=w1.text 14 songlist=wbd.find_elements_by_css_selector('span>a>b') #复数形式 15 sl=[] 16 for i in songlist: 17 sl.append(i.get_attribute('title')) 18 singerlist=wbd.find_elements_by_css_selector('div.text') 19 srl=[] 20 for j in singerlist: 21 srl.append(j.get_attribute('title')) 22 timed=wbd.find_element_by_css_selector('span.s-fc3').text 23 print(sl) 24 print(srl) 25 time.sleep(3) 26 wbd.quit() 27 28 book=xlwt.Workbook()#新建工作簿 29 sheet1=book.add_sheet(title) #创建sheet页表 30 \#写入行和列 31 sheet1.write(0,0,'歌曲') 32 sheet1.write(0,1,'歌手') 33 sheet1.write(0,2,timed) 34 row1=1 #行 35 for song in sl: 36 sheet1.write(row1,0,song) 37 row1+=1 38 row2=1 39 for singer in srl: 40 sheet1.write(row2,1, singer) 41 row2+=1 42 43 book.save('E:\XX-Software Test\web crawler\songTop.xls') #保存工作簿,可自定义路径,否则直接保存到项目内 44 print('write done.')
分类:
basic
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构