目标
将想要下载的歌曲名字存在列表中,批量搜索并下载代码。
准备
因为webdriver打开网页缓慢的原因,我考虑使用selenium控制已经打开的chrome网页,毕竟直接用chrome搜索歌曲和打开网页还是很快的。首先在pycharm中打开终端,输入以下命令切换到谷歌浏览器目录下:
cd \d C:\Program Files (x86)\Google\Chrome\Application 1
执行命令打开谷歌浏览器并保存配置在本地,这里路径可以选择和代码同级目录:
chrome.exe --remote-debugging-port=9222 --user-data-dir="e:\py_code\Reptile" 1
执行后会打开谷歌浏览器 ,在地址栏输入我们的网址:
http://www.gequdaquan.net/gqss/index.html
OK,准备工作完成!接下来交给脚本干活。
代码设计
网页驱动的配置:
chrome_options = Options() # chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222") chrome_options.debugger_address = "127.0.0.1:9222" chrome_driver = "chromedriver.exe" driver = webdriver.Chrome(chrome_driver, chrome_options=chrome_options)
这没啥好讲的,固定格式和端口号,具体参照谷歌中自动控制说明。
网页静音
因为前一篇文章说了下载歌曲需要点击播放,所以静音好点:
try: driver.find_element_by_xpath("//a[@class='player-btn btn-quiet']").click() except: pass
这里用try except框架,因为如果用户点击了静音,再一次点击是静音按钮的class属性会发生变化从而找不到对应的xpath会引发异常,所以如果异常直接跳过即可。
初始化
这里初始化搜索的所有歌曲名字,本地保存路径和歌曲下载地址的列表:
search_name = ["万有引力","苦笑"] savaer_path = "D://music//" list = []
批量获取url
下面这段代码调用我们自己写的getMusicUrl函数获取每个搜索名字对应歌曲的URL:
print("开始获取url") for name in search_name: music_url = getMusicUrl(driver,name) list.append(music_url)