- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章python Selenium实现付费音乐批量下载的实现方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
必备环境 。
废话 。
每年回家都要帮我爸下些音乐,这对我来说都是轻车熟路!可当我打开网易云点击下载按钮的时候,可惜已物是人非啦! 。
开个 vip 其实也不贵,临时用用也就¥15!但 it 男的尊严必须要有,于是开始徜徉于搜索引擎中 。
最后在知乎中,搜索到一个网址vip付费音乐解析 。
p.s.再次感谢提供该服务的作者!如果你下载的音乐数量不多,直接这里搜索下载,下载后修改文件名即可!并且在这个网址中点击播放列表-点击同步,可以同步网易云的歌单!之后批量下载即是下载这些网易云的歌单!但是下载某个歌单中的几百首歌,手动下载就不现实了!在点击同步中需要输入你的网易云 uid,这 uid 的获取方式如下:第一步打开网易云随便选中一首歌,右键复制链接 。
然后随便找个地方粘贴这个链接,例如https://music.163.com/song?id=25727803&userid=275613591最后这串数字就是 uid! 。
程序运行环境 。
第一步安装一个python3,这个简单吧!贴上我的版本 python3.65,安装时注意勾选add in path 。
第二步下载ffmpeg,这是用来解析视频和音频的,作为you-get的辅助工具,,下载后解压添加环境变量即可 。
第三步安装you-get,这是个下载视频音频的神器,有兴趣可以深入研究!之后我打算写个下载任意视频的工具,嘿嘿这是后话了!安装方式很简单pip install you-get 。
环境配置就这样,还是非常轻松的,下面会解释下代码 。
源码 。
完整代码 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
from
selenium
import
webdriver
from
selenium.webdriver.common.action_chains
import
actionchains
import
time, os
# import threding
def
get_music_name_link():
main_handle
=
browser.current_window_handle
fp
=
open
(
'e:\\project_py\\file\\musiclink.txt'
,
'wb'
)
fp2
=
open
(
'e:\\project_py\\file\\musicname.txt'
,
'wb'
)
try
:
for
i
in
list
(
range
(
2
,
400
)):
browser.switch_to_window(main_handle)
txt
=
browser.find_element_by_xpath(
'/html/body/div[3]/div/div[2]/div[2]/div[1]/div/div[%d]'
%
i).text
+
'\n'
fp2.write(bytes(txt,encoding
=
'utf-8'
))
location
=
browser.find_element_by_xpath(
'/html/body/div[3]/div/div[2]/div[2]/div[1]/div/div[%d]'
%
i)
actionchains(browser).move_to_element(location).perform()
browser.find_element_by_xpath(
'/html/body/div[3]/div/div[2]/div[2]/div[1]/div/div[%d]/span[5]/div/span[2]'
%
i).click()
time.sleep(
2
)
all_handles
=
browser.window_handles
browser.switch_to_window(all_handles[
-
1
])
# lastest
url_link
=
browser.current_url
+
'\n'
fp.write(bytes(url_link,encoding
=
'utf-8'
))
browser.close()
except
exception as e:
print
(
'get_music_name_link meet some problem! {}'
.
format
(e))
fp.close()
fp2.close()
def
download_music(list_name):
with
open
(
'e:\\project_py\\file\\musicname.txt'
,
'r'
,encoding
=
'utf-8'
) as fp1:
music_name
=
fp1.readlines()
len1
=
len
(music_name)
fp2
=
open
(
'e:\\project_py\\file\\musicname_format.txt'
,
'w'
,encoding
=
'utf-8'
)
for
i
in
range
(
3
,len1,
4
):
music_name_format
=
music_name[i].strip()
+
'\n'
fp2.write(music_name_format)
fp2.close()
with
open
(
'e:\\project_py\\file\\musiclink.txt'
,
'r'
,encoding
=
'utf-8'
) as fp1:
with
open
(
'e:\\project_py\\file\\musicname_format.txt'
,
'r'
,encoding
=
'utf-8'
) as fp2:
for
music_link,music_name
in
zip
(fp1.readlines(),fp2.readlines()):
you_get_link
=
'you-get "{}" -o "e:\\project_py\\file\\music\\{}" -o "{}"'
.
format
(music_link.strip(),list_name,music_name.strip())
you_get_link
=
you_get_link.strip()
# print(you_get_link)
os.system(you_get_link)
url
=
'http://music.zhuolin.wang/'
uid
=
input
(
'please input your uid:'
)
options
=
webdriver.firefoxoptions()
options.add_argument(
'--headless'
)
browser
=
webdriver.firefox(firefox_options
=
options)
browser.implicitly_wait(
8
)
browser.get(url)
# browser.maximize_window()
browser.set_window_size(
1000
,
100000
)
browser.find_element_by_xpath(
'/html/body/div[3]/div/div[1]/div/span[3]'
).click()
# scroll = browser.find_element_by_xpath('//*[@id="mcsb_1_dragger_vertical"]')
# actionchains(browser).drag_and_drop_by_offset(scroll,0,100).perform()
# time.sleep(2)
all_handles
=
browser.window_handles
browser.switch_to_window(all_handles[
-
1
])
# lastest
time.sleep(
1
)
browser.find_element_by_xpath(
'/html/body/div[3]/div/div[2]/div[1]/div[1]/div/span/div[2]/span'
).click()
all_handles
=
browser.window_handles
browser.switch_to_window(all_handles[
-
1
])
# lastest
time.sleep(
1
)
browser.find_element_by_xpath(
'/html/body/div[6]/div[2]/input'
).send_keys(uid)
browser.find_element_by_xpath(
'/html/body/div[6]/div[3]/a[1]'
).click()
# t1 = threading.thread(target=get_music_name)
# t2 = threading.thread(target=get_music_link)
# t3 = threading.thread(target=download_music)
for
i
in
list
(
range
(
3
,
100
)):
try
:
print
(
'downloading song_list{}! please waiting....'
.
format
(i))
browser.find_element_by_xpath(
'/html/body/div[3]/div/div[2]/div[1]/div[1]/div/div[%d]/img'
%
i).click()
dir_name
=
browser.find_element_by_xpath(
'/html/body/div[3]/div/div[2]/div[1]/div[1]/div/div[%d]/p'
%
i).text
time.sleep(
1
)
get_music_name_link()
download_music(dir_name)
browser.find_element_by_xpath(
'/html/body/div[3]/div/div[1]/div/span[3]'
).click()
time.sleep(
1
)
all_handles
=
browser.window_handles
browser.switch_to_window(all_handles[
-
1
])
# lastest
time.sleep(
5
)
except
exception as e:
print
(
'get_song_list meet some problem! {}'
.
format
(e))
browser.quit()
|
核心代码解释 。
总共有三个函数:
get_music_name_link
,主要是获取音乐名称以及音乐的下载链接download_music
,获取歌单名称,然后拼接下载链接和音乐名,调用you-get
开始下载到对应目录main
,主要是利用 uid 获取歌单,以及批量下载歌单中的曲目需要注意的几个点: 1.使用了sleep(1)休眠一秒,如果网络较慢需要将所有的sleep休眠时间加长 2.所有的路径需要自己根据本机修改 3.如果要修改代码一定要注意switch_to_window来切换窗口 4.73行的for i in list(range(3,100))是用来选择下载的歌单,歌单从 1 开始计数 。
程序演示 。
输入网易云的 uid! 。
然后静静的等待即可...此过程中会有部分音乐的播放声音,不喜欢可以开静音下 。
当所有的链接解析完成后就会调用you-get下载,此过程会自动创建与歌单名相同的文件夹 。
下载完成后 。
p.s.如果要下载所有歌单,就不需要修改代码,直接输入网易云的 uid 运行即可!如果要下载某个具体的歌单只需要改动73行的这个循环for i in list(range(3,100)),所以说程序还是比较简单的,缺点可能就是没时间写 ui,而且也不太会 pyqt 之类的,只会点 mfc!所以将就用吧,功能还是很齐全的! 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://segmentfault.com/a/1190000018001854 。
最后此篇关于python Selenium实现付费音乐批量下载的实现方法的文章就讲到这里了,如果你想了解更多关于python Selenium实现付费音乐批量下载的实现方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
Selenium IDE、Selenium RC 和 Selenium WebDriver 有什么区别;我们可以在什么样的项目中使用它们?任何建议将不胜感激。 最佳答案 Selenium IDE 是一
我的 Selenium 服务器在远程服务器上运行。我从我的本地 PC 启动我的 Selenium 脚本,它从网站获取数据。 例如,我的 Selenium 脚本执行这段 JS 代码: JSON.stri
Selenium 中“//div[.//a[text()='SELENIUM']]”和“//div[//a[text()='SELENIUM']]”有什么区别xpath。 有人可以澄清我在 xpath
我正在创建自动冒烟测试。我读到在单元测试中使用多个断言不是一个好的做法,这条规则是否也适用于使用 selenium 的 webdriver 测试? 在我的冒烟测试中,有时我会使用 20 多个断言来验证
我在一个变量中存储了一个值,在另一个变量中存储了第二个值,现在我想将这两个数字相加。我无法做到这一点,我尝试过下面的代码,但它不起作用 store 6 w sto
Selenium 中的回车键和回车键有什么区别? This related SO answer并且提供的链接说明它们是不同的。我还注意到,在使用 Firefox 24.2 时,回车键将发送一个 HTM
以下是我遇到异常的详细信息: 当我使用以下命令启动节点时,出现如下错误: F:\SeleniumGrid\Jars>java -jar selenium-server-standalone-3.0.0
我是 的新手 Selenium 我对版本号有点困惑。 Selenium 2.0 2011年发布。我刚刚下载了 Selenium IDE Firefox 扩展,版本为 1.7.2 .是否还有 IDE 的
我正在使用 Selenium 运行Codeception 2。我可以看到 Selenium 打开了浏览器并运行了测试。然后,我从代码接收中得到一个错误,即存在失败的断言。 我知道有一个HTML文件可以
Closed. This question needs to be more focused。它当前不接受答案。 想要改善这个问题吗?更新问题,使它仅关注editing this post的一个问题。
我想关闭弹出窗口(已知的窗口名称),然后返回到原始窗口。 我该怎么办? 如果我无法获得窗口中关闭按钮的常量。那么有没有达到目标的一般行为? 最佳答案 你有没有尝试过: selenium.Close()
我正在用webdriver做一个测试机器人。我有一个场景,它单击一个按钮,打开一个新窗口,并且它通过特定的xpath搜索元素,但是有时没有这样的元素,因为可以将其禁用,并且出现此错误:org.open
我是第一次使用Selenium,对这些选项不知所措。我在Firefox中使用IDE。 当我的页面加载时,它随后通过JSONP请求获取值,并在其中填充选择中的选项。 我如何让Selenium等待选择中的
我开始使用nightwatch.js编写e2e测试,我注意到我想在目标浏览器的控制台(开发人员工具)中手动检查一些错误。但总是在我打开开发者控制台时,浏览器会自动关闭它。这是selenium还是nig
我正在尝试使用以下方式刮除Glassdoor的评论: https://github.com/MatthewChatham/glassdoor-review-scraper 但是我得到了错误并且不知道如
背景 我设置了一个Selenium Grid项目,以在两种不同的浏览器Chrome和Firefox中执行测试。我正在使用Gradle执行测试。该测试将成功执行两次,一次按预期在Chrome中执行,一次
当测试失败时,运行 selenium 测试的浏览器将关闭。这在尝试调试时没有帮助。我知道我可以在失败时选择屏幕截图,但如果没有整个上下文,这并没有帮助。在浏览器仍然可用的情况下,我可以回击并检查发生了
使用 Selenium Web 驱动程序而不是 Selenium RC 启动新的测试框架是个好主意吗?对于 Selenium Web 驱动程序,并非所有 Selenium 方法都已实现。那么使用 Se
我使用 selenium 页面对象模型来定义所有页面元素。我对元素命名所遵循的命名约定不太相信,并且感觉太长了。请对此提出建议。 @FindBy(xpath = "//tbody[@id='tabvi
有一个带有按钮的 html 页面,我的 Selenium 测试正在测试,当单击按钮时,会执行一个操作。 问题是,看起来点击发生在 javascript 执行之前 - 在处理程序绑定(bind)到页面之
我是一名优秀的程序员,十分优秀!