Python中怎么使用Selenium下载歌曲-成都快上网建站

Python中怎么使用Selenium下载歌曲

这篇文章给大家介绍Python中怎么使用 Selenium下载歌曲,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的汝阳网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

步骤一:

进入酷狗主页,F12查看元素,,通过selenium.webdriver的send_keys()方法给send_input类传参,即用作用户的输入,然后通webdriver.click()方法点击搜索按钮,得到搜索结果列表。这里会有一个js重定向,通过webdriver.current_ur就可以了,,切记一点!传入的参数需要经过unicode编码(.decode(‘gb18030′))效果一样),否则如果有中文会乱码。。(来自被深深困扰的我)

Python中怎么使用 Selenium下载歌曲

步骤二:

查看元素里每首歌的路径,发现每首歌的路径只有

  • 不同,于是通过对li的迭代来获取每一首歌的xpath,并输出歌曲名字的元素,然后依旧通过webdriver的click()方法点击歌曲链接,得到歌曲播放页面,这里没有什么难点,都是常规操作。需要注意的是,这里的歌曲链接也包含一个js的重定向,但不一样的是浏览器会打开一个新的页面(至少火狐会),可以在click()方法后通过webdriver.switch_to_window()方法跳转到新打开的页面

    Python中怎么使用 Selenium下载歌曲

    步骤三:

    进入播放页面后通过xpath找到播放源文件链接(强推firepath,xpath神器啊)但发现这里依然有一个js渲染,来生成播放源链接,直接提取标签会显示为空,于是继续webdriver,调用的浏览器会自动解析js脚本,解析完成后提取得到歌曲链接,使用urllib的urlretrueve()下载即可

    Python中怎么使用 Selenium下载歌曲

    代码如下:

    #coding=utf-8 from selenium.webdriver.remote.webelement import WebElement from selenium import webdriver from selenium.webdriver import ActionChains from selenium.common.exceptions import NoSuchElementException from selenium.common.exceptions import StaleElementReferenceException from selenium.webdriver.common.desired_capabilities import DesiredCapabilities from selenium.webdriver.common.by import By import time import urllib  #歌曲名 mname = ''  #JS重定向 def wait(driver):     elem = driver.find_element_by_tag_name('html')     count = 0     while True:         count += 1         if count > 20:             print('chao shi le')             return         time.sleep(.5)         try:             elem == driver.find_element_by_tag_name('html')         except StaleElementReferenceException:             return  #获取url def geturl():     input_string = raw_input('>>>please input the search key:')     driver = webdriver.Chrome()     url = 'http://www.kugou.com/'     driver.get(url)     a=driver.find_element_by_xpath('html/body/div[1]/div[1]/div[1]/div[1]/input') #输入搜索内容     a.send_keys(input_string.decode('gb18030'))     driver.find_element_by_xpath('html/body/div[1]/div[1]/div[1]/div[1]/div/i').click() #点击搜索     result_url = driver.current_url     driver.quit()     return result_url   #显示搜索结果 def show_results(url):     driver = webdriver.Chrome()     driver.get(url)     time.sleep(3)     for i in range(1,1000):         try:             print '%d. '%i + driver.find_element_by_xpath(".//*[@id='search_song']/div[2]/ul[2]/li[%d]/div[1]/a"%i).get_attribute('title')  #获取歌曲名         except NoSuchElementException as msg:             break     choice = input(">>>Which one do you want(you can input 'quit' to goback(带引号)):")     if choice == 'quit':   #从下载界面退回         result = 'quit'     else:         global mname         mname = driver.find_element_by_xpath(".//*[@id='search_song']/div[2]/ul[2]/li[%d]/div[1]/a"%choice).get_attribute('title')         a = driver.find_element_by_xpath(".//*[@id='search_song']/div[2]/ul[2]/li[%d]/div[1]/a"%choice)         actions = ActionChains(driver)         actions.move_to_element(a)         actions.click(a)         actions.perform()         #wait(driver)         driver.switch_to_window(driver.window_handles[1])  #跳转到新打开的页面         result = driver.find_element_by_xpath(".//*[@id='myAudio']").get_attribute('src') #获取播放元文件url         driver.quit()     return result   #下载回调 def cbk(a, b, c):     per = 100.0 * a * b / c       if per > 100:         per = 100     print '%.2f%%' % per       def main():     print'***********************欢迎使用GREY音乐下载器********************************'     print'                                                      directed by GreyyHawk'     print'**************************************************************************'     time.sleep(1)     while True:         url = geturl()         result = show_results(url)         if result == 'quit':             print'\n'             continue         else:             local = 'd://%s.mp3'%mname             print 'download start'             time.sleep(1)             urllib.urlretrieve(result, local, cbk)             print 'finish downloading %s.mp3'%mname + '\n\n'    if __name__ == '__main__':   main()

    效果:

    Python中怎么使用 Selenium下载歌曲

    关于Python中怎么使用 Selenium下载歌曲就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


    当前题目:Python中怎么使用Selenium下载歌曲
    网页地址:http://kswjz.com/article/ghpicp.html
  • 扫二维码与项目经理沟通

    我们在微信上24小时期待你的声音

    解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流