Python开发音乐播放器(一)—— 模拟登陆+获得歌单信息

这个星期我的个人项目——(能导入各个平台歌单的)音乐播放器已经开始啦。所以先理清思路:

  1. 使用selenium进行模拟登录,即登录QQ号时同时能获得网易云和QQ音乐时可以获取两个账号的歌单
  2. 使用Python创建GUI界面(初期使用简洁的界面,后期再进行美化和功能增加)
  3. 将Python的GUI界面与第一步得到的歌单融合
  4. 解决音乐在播放器上播放的问题(目前想到的是两种方法:1.爬取源mp3文件,此方式较为困难并且可能涉及到版权问题暂时不适合。2. 得到播放的链接,进行在线播放)

期间可能会遇到各种问题或者说我的思路有问题的地方会进行改进,当然同时也不吝赐教。

一、selenium模拟登陆

首先是安装并且配置selenium的环境,网上都有教程这里就不赘述了。
接着进行网页的分析,打开网易云界面,我们首先要实现模拟登陆的功能。


image.png

查看此处的代码结构:


image.png

点击后弹出新的框:


image.png

此处因为需要点击QQ登录因此利用css选择器使用下列代码:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from time import sleep
class getMusic():
    #chrome_options=Options()
    #设置为无界面模式
    #chrome_options.add_argument('--headless')
    userid='***' #这里填上QQ号
    password='***'#这里填上对应的密码
    browser = webdriver.Chrome()
    browser.implicitly_wait(10)
    browser.get("https://music.163.com/")
    #login = browser.find_element_by_link_text('登录')
    #login.click()
    browser.implicitly_wait(10)
    browser.find_element_by_css_selector(".m-tophead.f-pr.j-tflag > a").click()  #点击登录
    #css 选择器中如果一个 tag 的 class 包含空格,要用.号代替空格
    browser.find_element_by_css_selector(".lyct.lyct-1 > div > div.u-alt > ul > li:nth-child(2) > a").click()  #点击QQ登录

运行代码,进入下列界面:

image.png

我们要先对选项卡进行切换

music_handle = browser.current_window_handle
print(music_handle) # 输出当前窗口句柄 
handles = browser.window_handles   # 获取当前全部窗口句柄集合
print(handles)
#切换到QQ登陆页面
for handle in handles:
    if handle != browser.current_window_handle:
        print('switch to qq login window')
        browser.switch_to.window(handle)
        browser.implicitly_wait(10)
        ##QQlogin = browser.find_element_by_link_text('QQ登录')
        #QQlogin.click()
#music_handle = browser.current_window_handle
browser.implicitly_wait(10)
sleep(2)

接着我们发现QQ登录窗口含有iframe:

image.png

因此先切换此窗口:

browser.switch_to.frame('ptlogin_iframe')

再点击帐号密码登录,出现文本框将账号密码输入后进行登录。

image.png
image.png
browser.find_element_by_link_text('帐号密码登录').click()
userid_ele=browser.find_element_by_name('u')
#password_ele=browser.find_element_by_id('pwdArea')
password_ele=browser.find_element_by_name('p')
userid_ele.send_keys(userid)
password_ele.send_keys(password)
browser.find_element_by_id('login_button').click()

切换回原窗口:

browser.switch_to.window(music_handle)

完成登录:


image.png

二、初步获得歌单信息

首先进入我的音乐:


image.png

代码:

browser.find_element_by_xpath('//*[@id="g-topbar"]/div[1]/div/ul/li[2]/span/a/em').click()
browser.implicitly_wait(10)
sleep(2)

接下来提取歌单的名称:

image.png

经过检查代码发现,这里也是个iframe:


image.png
browser.switch_to.frame('contentFrame')

提取名称:

list=[]
#list=browser.find_element_by_xpath('//*[@id="g_mymusic"]/div/div[1]/div/div[1]/ul/li[3]')
#list.click()
i=1
while True:
    try:
        list=browser.find_element_by_xpath('//*[@id="g_mymusic"]/div/div[1]/div/div[1]/ul/li[{}]'.format(i))
        print(list.text)
        i=i+1
    except:
        print('over')
        break;

输出结果:


image.png

(未完待续,如以上有疑问,不吝赐教)

你可能感兴趣的:(Python开发音乐播放器(一)—— 模拟登陆+获得歌单信息)