想要一首一首的播放音乐(歌曲、戏曲)怎么办呢?
下面,就以学习强国上播放”中国音乐“为例进行讲述:
网址:‘https://www.xuexi.cn/3f87e762ecb6a7da9e0a15bfaa84b339/5078e306c43bd30404897318853bbe45.html’
1.模拟器打开网址。
browse.get('https://www.xuexi.cn/3f87e762ecb6a7da9e0a15bfaa84b339/5078e306c43bd30404897318853bbe45.html')
2.定位搜索区域。
dingwei0 = browse.find_element(By.ID, '81d7')
3.搜索”中国音乐“的分类版块。
list0 = dingwei0.find_elements(By.CSS_SELECTOR, '.tab-item.center-item')
4.搜索分类版块中的专辑内容
list1 = browse.find_elements(By.CSS_SELECTOR, 'div.text-link-item-title span.text')
5.搜索专辑中的歌曲。
list2 = dingwei_1[0].find_elements(By.CSS_SELECTOR, '.album-songs li.album-list-item')
6.播放歌曲。
item2.find_element(By.CSS_SELECTOR, 'span.item-play').click()
持续时间:
while True: play_time_current = browse.find_element(By.CSS_SELECTOR, '.y-audio-player-main .y-audio-current').text play_time_total = browse.find_element(By.CSS_SELECTOR, '.y-audio-player-main .y-audio-total').text if play_time_current == play_time_total: try: browse.find_element(By.CSS_SELECTOR, '.y-audio-player-main .y-audio-pause').click() except: pass break time.sleep(1)
7.注意事项:
如果要播放的条目不在可视区域,需要及时向下滚动。即,每播放一条,执行一次下面代码:
browse.execute_script("window.scrollBy(0,48);")
8。完整代码:
import time from selenium import webdriver from selenium.webdriver.common.by import By import re import datetime browse = webdriver.Edge() browse.maximize_window() # 窗口最大化 browse.implicitly_wait(30)
print('版块:中国音乐') browse.get('https://www.xuexi.cn/3f87e762ecb6a7da9e0a15bfaa84b339/5078e306c43bd30404897318853bbe45.html') time.sleep(3) first_handle = browse.current_window_handle dingwei0 = browse.find_element(By.ID, '81d7') list0 = dingwei0.find_elements(By.CSS_SELECTOR, '.tab-item.center-item') for item in list0: print(item.text) item.click() time.sleep(1) all_handles = browse.window_handles browse.switch_to.window(all_handles[-1]) page_info = browse.find_element(By.CSS_SELECTOR, 'div._123TewfUWxUbDqs5ecsq6k') if page_info: list_page = page_info.find_elements(By.CSS_SELECTOR, '.btn') page_end = int(list_page[-1].text) page = 1 while page <= page_end: list1 = browse.find_elements(By.CSS_SELECTOR, 'div.text-link-item-title span.text') for flag1 in range(len(list1)): title = list1[flag1].text print(title) list1[flag1].click() time.sleep(1) all_handles0 = browse.window_handles browse.switch_to.window(all_handles0[-1]) time.sleep(1) browse.execute_script("window.scrollTo(0, document.body.scrollHeight / (100/30));") time.sleep(2) dingwei_1 = browse.find_elements(By.CSS_SELECTOR, '.album-wrap') if dingwei_1: list2 = dingwei_1[0].find_elements(By.CSS_SELECTOR, '.album-songs li.album-list-item') print('歌曲数量:', len(list2)) for flag, item2 in enumerate(list2): # browse.execute_script(f"window.scrollTo(0, document.body.scrollHeight /({len(list2)+30}/{flag+13}));") browse.execute_script("window.scrollBy(0,48);") print(flag, item2.text) item2.find_element(By.CSS_SELECTOR, 'span.item-play').click() while True: play_time_current = browse.find_element(By.CSS_SELECTOR, '.y-audio-player-main .y-audio-current').text play_time_num = int(play_time_current.split(':')[0]) * 60 + int(play_time_current.split(':')[1]) play_time_total = browse.find_element(By.CSS_SELECTOR, '.y-audio-player-main .y-audio-total').text # if play_time_current == play_time_total or play_time_num > 5: if play_time_current == play_time_total: try: browse.find_element(By.CSS_SELECTOR, '.y-audio-player-main .y-audio-pause').click() except: pass break time.sleep(1) browse.close() browse.switch_to.window(all_handles0[-2]) time.sleep(1) page += 1 list_page = page_info.find_elements(By.CSS_SELECTOR, '.btn') for page_info in list_page: if page_info.text == str(page): page_info.click() break time.sleep(1) browse.close() browse.switch_to.window(all_handles[-2]) time.sleep(1)