本节所讲内容:

1.Selenium+Python环境搭建及配置

2.自动化获取歌曲url地址

3.多窗口下载歌曲

注意:如果想直接运转代码请转到文章的末尾

本节知识点:selenium+智能等待+显式等待+鼠标悬停事件+多窗口切换+数据下载

整体项目思路:

1.  获取QQ音乐官网的歌曲地址

2.  拿到歌曲地址之后利用免费的接口地址(毕竟没有付费),进行获取资源

3、下载免费资源提供的数据

1、Selenium+Python环境搭建及配置

1.  selenium 介绍

selenium 是一个 web 的自动化测试工具,不少学习功能自动化的同学开始首选selenium:

1.2  selenium+Python环境配置

前提条件:已安装好Python开发环境(python3.7.2)

安装步骤:

1.安装selenium

Win:pip install selenium

2.  安装webdriver

各大浏览器webdriver地址可参见:https://docs.seleniumhq.org/download/
Firefoxhttps://github.com/mozilla/geckodriver/releases/
Chromehttps://sites.google.com/a/chromium.org/chromedriver/ 或者
http://chromedriver.storage.googleapis.com/index.html
IEhttp://selenium-release.storage.googleapis.com/index.html
:webdriver需要和对应的浏览器版本以及selenium版本对应

Webdriver版本

支持的Chrome版本

v2.41

v67-69

v2.40

v66-68

v2.39

v66-68

v2.38

v65-67

v2.37

v64-66

v2.36

v63-65

v2.35

v62-64

v2.34

v61-63

3.  webdriver安装路径

Win:复制webdriver到Python安装目录下或者在path中配置下路径(方便python能快速寻找)

2.  自动化获取歌曲url地址

登录网址为:https://y.qq.com/ 进行搜索‘说好不哭’,获取第一首歌曲的链接地址

需要解决的问题:

  1.   利用Chrome操作的时候 会弹出下载界面
  2.   在搜索的时候,不使用鼠标悬停会报出错误,说找不到元素

具体解决方案如下:

找到对应元素,并关闭

#找到下载弹窗,关闭
WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CLASS_NAME,'popup__hd')))
driver.find_element_by_class_name('popup__icon_close').click()

#鼠标动作链
#move_to_element:鼠标悬停
#perform:执行所有的ActionChains中的存储行为from selenium.webdriver.common.action_chains import ActionChains
#鼠标悬停事件
above = driver.find_element_by_class_name('search_input__btn')
ActionChains(driver).move_to_element(above).perform()

完整代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import time
from selenium.webdriver.common.action_chains import ActionChains
qq_url = 'https://y.qq.com/'
driver = webdriver.Chrome()
driver.get(qq_url)
driver.implicitly_wait(10)
time.sleep(10)
WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CLASS_NAME,'popup__hd')))
driver.find_element_by_class_name('popup__icon_close').click()
time.sleep(2)
above = driver.find_element_by_class_name('search_input__btn')
ActionChains(driver).move_to_element(above).perform()
driver.find_element_by_class_name('search_input__input').send_keys('说好不哭')
driver.find_element_by_xpath('//button[@class="search_input__btn"]').click()
song_url = driver.find_element_by_class_name('songlist__songname_txt').find_element_by_tag_name('a').get_attribute('href')
print('你要下载的歌曲url地址为:',song_url)
运行结果如下:

3.多窗口下载歌曲

免费下载数据的地址: http://www.douqq.com/qqmusic/,主要通过这个地址,该歌曲资源

主要用到代码如下:
# 新开一个窗口,通过执行js来新开一个窗口
js = 'window.open("http://www.douqq.com/qqmusic/");'
driver.execute_script(js)# 输出当前窗口句柄(百度)
QQ_handle = driver.current_window_handle# 获取当前窗口句柄集合(列表类型)
handles = driver.window_handles
print('该浏览器所有的句柄为:',handles)  # 输出句柄集合# 获取新窗口句柄
API_handle = None
for handle in handles:if handle != QQ_handle:API_handle = handle# 输出当前窗口句柄(搜狗)
print('进行切换新窗口:', handle)driver.switch_to.window(API_handle)

实现效果如下

完整代码如下:

#!/usr/bin/python# -*- coding: utf-8 -*-# @Time    : 2019/9/26 10:22# @Author  : Xuegod Teacher For# @File    : QQ音乐自动化测试.py# @Software: PyCharmfrom urllib.request import urlretrieve
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC#鼠标动作链
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()def get_song_url():qq_url = 'https://y.qq.com/'driver.get(qq_url)driver.implicitly_wait(10)time.sleep(2)#找到下载弹窗,关闭    WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CLASS_NAME,'popup__hd')))driver.find_element_by_class_name('popup__icon_close').click()time.sleep(2)#鼠标悬停事件above = driver.find_element_by_class_name('search_input__btn')ActionChains(driver).move_to_element(above).perform()driver.find_element_by_class_name('search_input__input').send_keys('说好不哭')driver.find_element_by_xpath('//button[@class="search_input__btn"]').click()song_url = driver.find_element_by_class_name('songlist__songname_txt').find_element_by_tag_name('a').get_attribute('href')print('你要下载的歌曲url地址为:',song_url)return song_urldef down_song_mv(song_url):# 新开一个窗口,通过执行js来新开一个窗口js = 'window.open("http://www.douqq.com/qqmusic/");'driver.execute_script(js)# 输出当前窗口句柄(百度)QQ_handle = driver.current_window_handle# 获取当前窗口句柄集合(列表类型)handles = driver.window_handlesprint('该浏览器所有的句柄为:',handles)  # 输出句柄集合# 获取新窗口句柄API_handle = Nonefor handle in handles:if handle != QQ_handle:API_handle = handle# 输出当前窗口句柄(搜狗)print('进行切换新窗口:', handle)driver.switch_to.window(API_handle)print('切换成功,可发送请求地址')driver.find_element_by_id('mid').send_keys(song_url)driver.find_element_by_id('sub').click()time.sleep(2)# WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.ID,'mv')))print('获取到mv地址')mv_url = driver.find_element_by_id('mv').textimport requestsif mv_url:#文件下载print('正在下载……这个过程有点慢')urlretrieve(mv_url,'说好.mp4')else:print('没有获取视频地址,需要重新运行')print('下载完毕,退出浏览器')driver.quit()if __name__ == '__main__':song_url = get_song_url()down_song_mv(song_url)

运行结果如下:

Selenium 全自动化下载QQ付费音乐-说好不哭MV相关推荐

  1. python 爬虫+selenium 全自动化下载JS动态加载漫画

    ** python 爬虫+selenium 全自动化下载JS动态加载漫画 最近刚学的python,代码可能并不规范,希望大家见谅! 爬取之前,我们首先需要做一些准备工作,因为很多网站都有反爬检索,为了 ...

  2. 用selenium全自动化爬取教务系统作业清单

    写在前文:撰写本文仅用于学习交流,不承担因此带来任何的潜在风险和责任 文章目录 0 目的明确,限制和思考 1 前置模块准备 1.1 selenium安装及简单操作 1.2 python lxml模块安 ...

  3. Python+Selenium 网页自动化 exe 程序编程实现(最全避坑指南)

    前言 在我的日常工作中,经常需要在内网(不连接互联网)的网页版办公系统中进行抓取网页数据.修改表单等大量重复性的操作.我就想是否可以编写出自动化的工具,将这些日常琐碎的操作变得轻松而高效.虽然本人非计 ...

  4. 如何简单地通过网页下载付费音乐?

    由于各种音乐版权的不可抗因素, 很多优质音乐只能在线试听却不能下载. 大部分人想要下载只能去网上搜各种云盘, 各种资源, 求分享.花了很多时间.精力也未必能下载的到. 如何简单地通过网页下载付费音乐? ...

  5. 下载付费音乐(贝塔的随手日记)

    首先进入-->网易云音乐,进入后选择一首需要付费的歌曲,进行分享歌曲到自己的qq好友里, 接着进入qq,分享的界面进行复制该链接 复制网址后,打开电脑浏览器,进行打开该链接 打开后进行播放该音乐 ...

  6. Selenium自动化下载文件Firefox配置教程

    在上一篇文章中有提到[使用Selenium server standalone实现定时web自动化下载电影],这只是实现了下载脚本和Selenium server的部署,但在实际下载过程中,这样的设置 ...

  7. 【技术贴】火狐QQ空间音乐插件下载+火狐进空间没背景音乐崩溃解决+火狐浏览器插件推荐...

    火狐QQ空间没声音火狐QQ空间崩溃火狐空间没音乐崩溃火狐QQ空间没音乐没声音 火狐进入QQ空间音乐不能播放以及进入空间崩溃的解决办法.见文章末尾. 火狐浏览器需要添加的插件.大集合下载地址.以及文字说 ...

  8. python自动下载qq文件夹_GitHub - 1061700625/QQZone_AutoDownload_Album: Python+selenium 自动下载QQ空间相册...

    QQZone_AutoDownload_Album Python+selenium 自动下载QQ空间相册 . selenium_firefox.zip 需要解压后放在同路径下 . 貌似腾讯的登陆加密做 ...

  9. python爬取付费音乐包有什么用_用Python制作音乐聚合下载器!付费的好像也能下载哦!...

    现在的音乐APP有很多,为了不下载很多的APP,所以咱用python做了一个聚合的音乐下载器,现在聚合了咪咕音乐.QQ音乐,下面是效果图 安装 需要安装一个辅助模块 prettytable,用于美化控 ...

  10. AERONET AOD 数据自动化下载 + PYTHON + SELENIUM

    目录 5.05更新 增加FMF.SSA数据下载(见GitHub) 4.10更新 通过CURL.WGET等方式下载目标数据 获取下载地址 Using Tools to Save Web Output a ...

最新文章

  1. 多媒体领域顶会--ACM MM 2020 会议论文打包下载
  2. 十一.python面向对象(接口)abstractmethod,ABCMeta
  3. 多进程 fork()与vfork()
  4. [[UIScreen mainScreen] bounds]获取尺寸不对
  5. Java中的各种锁事
  6. Dijkstra求最短路 II
  7. vSAN其实很简单-vSAN 原厂支持的包含范围
  8. Joseph_Circle(约瑟夫环)
  9. views是什么意思_views是什么意思_views怎么读_views翻译_用法_发音_词组_同反义词_看( view的名词复数 )-新东方在线英语词典...
  10. 网络01:双无线路由器无缝对接设置
  11. result之global-results全局结果集
  12. iOS 腾讯云IM UIKit 升级XCode11后, 调用语音(取消) 崩溃问题
  13. Eclipse启动时弹出Subversive Connector Discovery窗口解决办法
  14. ckplayer只调用html,CKplayer 新手入门超简单使用教程
  15. 【Nginx】503 Service Temporarily Unavailable
  16. 《最强大脑》之四色定理—— GIS 无处不在
  17. 虚拟服务器防病毒,windows 2008 Hyper-v虚拟化防病毒
  18. java el if_EL 表达式中条件运算符用于执行某种条件判断,它类似于 Java 语言中的 if-else 语句 。 ( )_学小易找答案...
  19. 本题要求从输入的N个整数中查找给定的X。如果找到,输出X的位置(从0开始数);如果没有找到,输出“Not Found”
  20. excel表格拆分多个表如何快速完成?

热门文章

  1. 智能网联汽车测试场景数据车载采集平台搭建要求及方法
  2. 中标麒麟 V7 操作系统安装达梦数据库 DM8
  3. 分享一个好用的图吧电脑工具
  4. VM虚拟机不被低版本兼容问题
  5. NVivo 12 Mac的大规模部署
  6. 【复习】数学分析知识点梳理【思维导图】
  7. 【矩阵论】对称矩阵特征值的性质与直积
  8. 自学啊哈C的推箱子的编程代码
  9. javacv相关学习:了解javacv
  10. 玩手游神助攻:盘点那些具有游戏宏按键,可自定义按键一键多用的模拟器