python制作远程音乐下载器----------(python+selenium初步实现下载付费歌曲)

import urllib.request
from time import sleep
import tkinter.messagebox
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options

#-----------------------------定义查询功能
Current_index=0
Index_list=[]
Song_name_list=[]
Download_list=[]

user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15"
opt = webdriver.ChromeOptions()
opt.add_argument('--user-agent=%s' % user_agent)
opt.add_argument('--headless')
opt.add_argument('--disable-gpu')
driver = webdriver.Chrome(options=opt)
driver.maximize_window()   
driver.implicitly_wait(30)  



def Search(keyword):
    global driver
    global Song_name_list
    
    listbox1.delete(0,len(Song_name_list))
    Song_name_list=[]
    
    url="http://mctool.cn/music/"
    driver.get(url)
    search_input = driver.find_element_by_id("input")
    search_input.send_keys(keyword)
    sleep(1)
    button = driver.find_element_by_class_name("am-input-group-btn")
    button.click()    
    pass

      
def Get_SongName():
    
    global driver
    global Index_list
    global Download_list
    global Song_name_list
    #1.展开歌单
    #i=0
    #while 1:      
        #next_page=driver.find_element_by_xpath('//*[@id="player"]/div[2]')
        #text=next_page.get_attribute('innerHTML')
        
        #if text=="下一页" and i<1:
           # next_page.click()
           # i=i+1
           # sleep(3)
       # else:
          #  break
    
    #2.下载歌曲
    sleep(5)
    Index_list=driver.find_elements_by_class_name("aplayer-list-index")
    Download_list=driver.find_elements_by_class_name("am-icon-download")
    Song_list=driver.find_elements_by_class_name("aplayer-list-title")     
    for i in range(len(Song_list)):
        SongName=Song_list[i].get_attribute('innerHTML')
        print(SongName)
        Song_name_list.append(SongName)   
            
    
def  Search_Result():
    global Song_name_list  
    keyword=search_input.get()
    Search(keyword)
    Get_SongName()
    num=1    
    for i in Song_name_list:
        Num=str(num)+"."
        listbox1.insert(END,Num+i)
        num+=1 
        
#----------------------------界面--------------------------------------    
from tkinter import *
import tkinter as tk

root=tk.Tk()        
root.title('远程接口下载器')
root.geometry('480x400')
root.resizable(0,0)


def Play(event):
    global Index_list
    global Current_index
    songname=listbox1.get(listbox1.curselection())  
    index=int(int(songname.split(".")[0])-1)
    print(index)
    Index_list[index].click()
    Current_index=index



def Download():
    global Download_list
    global Song_name_list
    global driver
    global Current_index
    try:
        index=Current_index
        Download_list[index].click()
        sleep(2)
        
        url=driver.find_element_by_class_name("download").get_attribute("href")  
        SongName=Song_name_list[index]
        urllib.request.urlretrieve(url, "E:\\"+SongName+".mp3")
        tk.messagebox.showinfo(message="下载成功")
    except:
        tk.messagebox.showerror(message="下载失败")
    
    sleep(0.5)
    close=driver.find_element_by_xpath('//*[@id="m-download"]/div/div[3]/span')    
    close.click()
    

def cancel():
    pass
 

menu = Menu(root, tearoff=0)
menu.add_command(label="下载",command=Download)
menu.add_separator()
menu.add_command(label="取消",command=cancel)
 
 
def popupmenu(event):
    menu.post(event.x_root, event.y_root)
 
 
    
#1.界面-------------------------
#1.搜索输入框
search_input=tk.Entry(root,justify=CENTER,state=NORMAL)                       
search_input.place(x=20,y=10,width=400,height=30) 

#2.搜索按钮
search_button=tk.Button(root,text="搜索",command=Search_Result)
search_button.place(x=420,y=10)

#3.滑动列表
scrollbar1 = Scrollbar(root)
scrollbar1.pack(side=RIGHT, fill=Y)


listbox1 = Listbox(root,height=18,width=220)
listbox1["yscrollcommand"] = scrollbar1.set

listbox1.pack(side=BOTTOM)
scrollbar1["command"] = listbox1.yview

listbox1.bind('<Double-Button-1>',Play)
listbox1.bind('<B3-Motion> ',popupmenu)


#------------------------------------------------------------------
root.mainloop()
driver.quit()
发布了122 篇原创文章 · 获赞 221 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/jjsjsjjdj/article/details/103293241