Use Python para rastrear hasta la dirección de descarga de audio y luego use Internet Download Manager para descargar automáticamente en lotes
# - * - coding: utf-8 - * - "" " Creado el viernes 14 de diciembre 21:07:11 2018 @author: fuwen " "" from subprocess import call import os, orders , base64, json, time import jsonpath import html de bs4 import BeautifulSoup type = 1 #https: //www.lrts.me/album/400485 bookid BookID = 99144 # Sections = 0 # Cuántos capítulos en total Chapter = 92 #Save path FilePath = 'd: \\ mp3' # Elimine todos los archivos de la carpeta y vuelva a crear def delDir (TitleName): global FilePath FilePath = FilePath + "\\" + TitleName si os.path.exists (FilePath) es True: os.system ('RD / q / s' + Ruta de archivo) print () #Utilice os.mkdir (FilePath) IDM para instalar y descargar IdmPath = 'd: \\ Internet Download Manager \\ IDMan.exe' #Cierre el programa autoit para detectar el cuadro emergente y haga clic en el programa exe_name = "lrts.exe" def kill_exe (exe_name): "" " Kill exe process : param exe_name: process name : return: none " "" os.system ('taskkill / f / t /im'+exe_name)#MESMTPC.exe nombre del programa print ("kill process {}". format (exe_name)) def get_json_value (json_data, key_name): '' 'Obtiene el valor de cualquier clave en json, y el resultado está en formato de lista' '' # key_value = jsonpath.jsonpath (json_data, '$ .. (key_name)'. formato (nombre_clave = nombre_clave)) # https://blog.csdn.net/nail_ciclaje/article/details/80980296 key_value = jsonpath.jsonpath (json_data, '$ [*]. {key_name}'. format (key_name = key_name)) format (key_name = key_name)) # el valor de la clave no es una cadena vacía o vacía (el vacío siempre se escribe vacío en el caso de uso) devuelve el valor correspondiente; de lo contrario, devuelve vacío return key_value def getChapterTitle (html): soup = BeautifulSoup (html, 'html.parser') tilename = soup. find ('h1', attrs = {"class": "nowrap"}) # 查找 span class 为 red 的 字符串 return tilename.text def IdmDownLoad (DownloadUrl, Mp3Name): call ([IdmPath, '/ d', DownloadUrl , '/ p', FilePath, '/ f', Mp3Name, '/ n']) def IdmDownLoadChangeName (DownloadUrl, Mp3Name): # call ([IdmPath, '/ d', DownloadUrl, '/ p', FilePath, ' / n ']) begin = DownloadUrl.rfind (' / ') end = DownloadUrl.rfind ('? ') src_name = DownloadUrl [begin + 1: end] os.rename (FilePath + "\\" + src_name, FilePath + "\\" + Mp3Name) def ChangeFileName (nombre de archivo): filename = filename.replace ('\\', '') if __name__ == "__main__": nombre de archivo = nombre de archivo.reemplazar ('/', '') nombre de archivo = nombre de archivo.replace (':', '') filename = filename.replace ('*', '') filename = filename.replace ('“', '') filename = filename.replace ('”', '') filename = filename.replace ('<', ' ') nombre de archivo = nombre de archivo.replace ('> ',' ') nombre de archivo = nombre de archivo.replace (' | ',' ') nombre de archivo = nombre de archivo.replace ('? ','? ') nombre de archivo = nombre de archivo.replace (' ( ',' (') nombre de archivo = nombre de archivo.replace (chr (65279),' ') # UTF-8 + BOM # print (ord (nombre de archivo [0])) nombre de archivo = nombre de archivo.split (' (') [0] return html.unescape (nombre de archivo) Mp3ListJsonUrl = 'https://www.lrts.me/ajax/album/{0}/{1}/{2}'.formato (BookID, Secciones, Capítulos) headers = {'User-Agent': 'Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 55.0.2883.95 Safari / 537.36'} TitleUrl = 'https: // www. lrts.me/album/{0}'.format(BookID) conn = orders.session () Mp3ListDic = {} Mp3ListJson = conn.get (Mp3ListJsonUrl, headers = headers) Mp3TitleJson = conn.get (TitleUrl, headers = headers) titlename = getChapterTitle (Mp3TitleJson.text) si el título es None: print ("没 找到 这个 题目") exit () print (titlename) delDir (nombre del título) Mp3ListJson = json.loads (Mp3ListJson.text) # print (Mp3ListJson ["data"] [" datos "]) Josndata = Mp3ListJson [" datos "]["datos"] Mp3IdList = get_json_value (Josndata, "id") # print (Mp3IdList) Mp3IdNameList = get_json_value (Josndata, "nombre") para el elemento en Mp3IdNameList: index = Mp3IdNameList.index (elemento) Mp3ListDic [html.unescape (elemento)] = Mp3IdList [índice] # Mp3ListDic [Mp3IdList [índice] .unescape (artículo) # imprimir (Mp3ListDic) Mp3List = Josndata Mp3NameList = [Mp3dict ['nombre'] para Mp3dict en Mp3List] Mp3NameList = [ChangeFileName (i) para i en Mp3NameList] # print (Mp3NameList) AlreadyDown = [FileName.replace ('. Mp3', '') para FileName en os.listdir (FilePath)] Count = 0 os.startfile (exe_name) time.sleep (2) para Mp3Name en Mp3NameList: Count + = 1 # if Count == 2: # romper si Mp3Name en AlreadyDown: continue # type = 1 & resourcesid = 99144 & section = 1 \ Mp3JsonUrl = "https://www.lrts.me/ajax/playlist/{0}/{1}/{2}" .format (tipo, BookID , Count) Mp3Url = conn.get (Mp3JsonUrl, headers = headers) # print (Mp3Url.text) html = Mp3Url.text soup = BeautifulSoup (html, 'html.parser') mp3id = "section" + str (Mp3ListDic [Mp3Name ]) imprimir (mp3id) s1 = soup .find ('li', attrs = {"id": mp3id}) # 查找 span class 为 red 的 字符串 DownloadUrl = s1.find ('input') ["value"] print (DownloadUrl) try: IdmDownLoad (DownloadUrl , Mp3Name + '. Mp3') tiempo.dormir (2) excepto: imprimir ( '% s, no haya sido comprado, se saltó ...' Mp3Name%) kill_exe (exe_name) 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828103104858105888107132109116134127112130118103104858105888107132
Luego use autoit para escribir un programa para cerrar el molesto cuadro de mensaje de idm
$ winTitle = "Administrador de descargas de Internet" Mientras que 1 $ winHandle = WinGetHandle ($ winTitle); ConsoleWrite (WinGetTitle ($ winHandle)) Si WinGetTitle ($ winHandle) == "Administrador de descargas de Internet", entonces WinActivate ($ winHandle) EndIf If WinWaitActive ("Administrador de descargas de Internet") Entonces ; ConsoleWrite ($ winHandle) ControlClick ($ winHandle, " "," [ID: 7] ") EndIf Sleep (100) WEnd