Selenium 全自动化下载QQ付费音乐-说好不哭MV
本节所讲内容:
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/
Firefox:https://github.com/mozilla/geckodriver/releases/
Chrome:https://sites.google.com/a/chromium.org/chromedriver/ 或者
http://chromedriver.storage.googleapis.com/index.html
IE:http://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/ 进行搜索‘说好不哭’,获取第一首歌曲的链接地址
需要解决的问题:
- 利用Chrome操作的时候 会弹出下载界面
- 在搜索的时候,不使用鼠标悬停会报出错误,说找不到元素
具体解决方案如下:
找到对应元素,并关闭
#找到下载弹窗,关闭
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相关推荐
- python 爬虫+selenium 全自动化下载JS动态加载漫画
** python 爬虫+selenium 全自动化下载JS动态加载漫画 最近刚学的python,代码可能并不规范,希望大家见谅! 爬取之前,我们首先需要做一些准备工作,因为很多网站都有反爬检索,为了 ...
- 用selenium全自动化爬取教务系统作业清单
写在前文:撰写本文仅用于学习交流,不承担因此带来任何的潜在风险和责任 文章目录 0 目的明确,限制和思考 1 前置模块准备 1.1 selenium安装及简单操作 1.2 python lxml模块安 ...
- Python+Selenium 网页自动化 exe 程序编程实现(最全避坑指南)
前言 在我的日常工作中,经常需要在内网(不连接互联网)的网页版办公系统中进行抓取网页数据.修改表单等大量重复性的操作.我就想是否可以编写出自动化的工具,将这些日常琐碎的操作变得轻松而高效.虽然本人非计 ...
- 如何简单地通过网页下载付费音乐?
由于各种音乐版权的不可抗因素, 很多优质音乐只能在线试听却不能下载. 大部分人想要下载只能去网上搜各种云盘, 各种资源, 求分享.花了很多时间.精力也未必能下载的到. 如何简单地通过网页下载付费音乐? ...
- 下载付费音乐(贝塔的随手日记)
首先进入-->网易云音乐,进入后选择一首需要付费的歌曲,进行分享歌曲到自己的qq好友里, 接着进入qq,分享的界面进行复制该链接 复制网址后,打开电脑浏览器,进行打开该链接 打开后进行播放该音乐 ...
- Selenium自动化下载文件Firefox配置教程
在上一篇文章中有提到[使用Selenium server standalone实现定时web自动化下载电影],这只是实现了下载脚本和Selenium server的部署,但在实际下载过程中,这样的设置 ...
- 【技术贴】火狐QQ空间音乐插件下载+火狐进空间没背景音乐崩溃解决+火狐浏览器插件推荐...
火狐QQ空间没声音火狐QQ空间崩溃火狐空间没音乐崩溃火狐QQ空间没音乐没声音 火狐进入QQ空间音乐不能播放以及进入空间崩溃的解决办法.见文章末尾. 火狐浏览器需要添加的插件.大集合下载地址.以及文字说 ...
- python自动下载qq文件夹_GitHub - 1061700625/QQZone_AutoDownload_Album: Python+selenium 自动下载QQ空间相册...
QQZone_AutoDownload_Album Python+selenium 自动下载QQ空间相册 . selenium_firefox.zip 需要解压后放在同路径下 . 貌似腾讯的登陆加密做 ...
- python爬取付费音乐包有什么用_用Python制作音乐聚合下载器!付费的好像也能下载哦!...
现在的音乐APP有很多,为了不下载很多的APP,所以咱用python做了一个聚合的音乐下载器,现在聚合了咪咕音乐.QQ音乐,下面是效果图 安装 需要安装一个辅助模块 prettytable,用于美化控 ...
- AERONET AOD 数据自动化下载 + PYTHON + SELENIUM
目录 5.05更新 增加FMF.SSA数据下载(见GitHub) 4.10更新 通过CURL.WGET等方式下载目标数据 获取下载地址 Using Tools to Save Web Output a ...
最新文章
- 多媒体领域顶会--ACM MM 2020 会议论文打包下载
- 十一.python面向对象(接口)abstractmethod,ABCMeta
- 多进程 fork()与vfork()
- [[UIScreen mainScreen] bounds]获取尺寸不对
- Java中的各种锁事
- Dijkstra求最短路 II
- vSAN其实很简单-vSAN 原厂支持的包含范围
- Joseph_Circle(约瑟夫环)
- views是什么意思_views是什么意思_views怎么读_views翻译_用法_发音_词组_同反义词_看( view的名词复数 )-新东方在线英语词典...
- 网络01:双无线路由器无缝对接设置
- result之global-results全局结果集
- iOS 腾讯云IM UIKit 升级XCode11后, 调用语音(取消) 崩溃问题
- Eclipse启动时弹出Subversive Connector Discovery窗口解决办法
- ckplayer只调用html,CKplayer 新手入门超简单使用教程
- 【Nginx】503 Service Temporarily Unavailable
- 《最强大脑》之四色定理—— GIS 无处不在
- 虚拟服务器防病毒,windows 2008 Hyper-v虚拟化防病毒
- java el if_EL 表达式中条件运算符用于执行某种条件判断,它类似于 Java 语言中的 if-else 语句 。 ( )_学小易找答案...
- 本题要求从输入的N个整数中查找给定的X。如果找到,输出X的位置(从0开始数);如果没有找到,输出“Not Found”
- excel表格拆分多个表如何快速完成?