Python開發(fā)音樂播放器(一)—— 模擬登陸+獲得歌單信息

這個星期我的個人項目——(能導(dǎo)入各個平臺歌單的)音樂播放器已經(jīng)開始啦。所以先理清思路:

  1. 使用selenium進行模擬登錄,即登錄QQ號時同時能獲得網(wǎng)易云和QQ音樂時可以獲取兩個賬號的歌單
  2. 使用Python創(chuàng)建GUI界面(初期使用簡潔的界面,后期再進行美化和功能增加)
  3. 將Python的GUI界面與第一步得到的歌單融合
  4. 解決音樂在播放器上播放的問題(目前想到的是兩種方法:1.爬取源mp3文件,此方式較為困難并且可能涉及到版權(quán)問題暫時不適合。2. 得到播放的鏈接,進行在線播放)

期間可能會遇到各種問題或者說我的思路有問題的地方會進行改進,當(dāng)然同時也不吝賜教。

一、selenium模擬登陸

首先是安裝并且配置selenium的環(huán)境,網(wǎng)上都有教程這里就不贅述了。
接著進行網(wǎng)頁的分析,打開網(wǎng)易云界面,我們首先要實現(xiàn)模擬登陸的功能。


image.png

查看此處的代碼結(jié)構(gòu):


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()
    #設(shè)置為無界面模式
    #chrome_options.add_argument('--headless')
    userid='***' #這里填上QQ號
    password='***'#這里填上對應(yīng)的密碼
    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) # 輸出當(dāng)前窗口句柄 
handles = browser.window_handles   # 獲取當(dāng)前全部窗口句柄集合
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)

接著我們發(fā)現(xiàn)QQ登錄窗口含有iframe:

image.png

因此先切換此窗口:

browser.switch_to.frame('ptlogin_iframe')

再點擊帳號密碼登錄,出現(xiàn)文本框?qū)①~號密碼輸入后進行登錄。

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

經(jīng)過檢查代碼發(fā)現(xiàn),這里也是個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;

輸出結(jié)果:


image.png

(未完待續(xù),如以上有疑問,不吝賜教)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容