Eine wichtige Funktion wurde zu dem zuvor erstellten "Lassen Sie uns automatisch den Text des in iTunes in iTunes abgespielten Songs anzeigen" hinzugefügt.
Sobald die Textseite eines Songs geöffnet wurde, wurde diese Seite bis zum Ende dieses Songs angezeigt. Wenn Sie jedoch zum nächsten Song springen, wird in den Texten auch der nächste Song angezeigt.
Vorher ändern
while True:
start = time.time() # delete
# ~~~~~~~~
time.sleep(music_time - (time.time() - start)) # delete
Nach der veränderung
prev_track_name = "" # add
while True:
#Songname, Albumname, Künstlername, Songlänge abspielen
name = music.current_track.name.get()
artist = music.current_track.artist.get()
album = music.current_track.album.get()
music_time = music.current_track.time.get() # m:s str
# add-start
if name == prev_track_name:
time.sleep(1)
continue
prev_track_name = name
# add-end
# ~~~~~~~~
time.sleep(1) # add
Ich habe eine Zeitüberschreitung festgelegt, da das Anzeigen der Textseite lange gedauert hat.
Nach der veränderung
driver = webdriver.Chrome(executable_path="chromedriver")
driver.get("https://www.google.com/") #Registerkarte "Initial"
driver.set_page_load_timeout(5) #Maximale Wartezeit beim Lesen (in diesem Fall 5 Sekunden)# add
Die Texte selbst können bis zu 5 Sekunden lang gelesen werden, andere Bilder dauern jedoch lange und die Ladezeit der Seite ist lang, sodass sie nach 5 Sekunden zwangsweise beendet werden. Übrigens wurde auch "Zur Position der Texte scrollen" geändert, um nach der Position der Texte zu suchen und zu dieser Position zu scrollen.
Vorher ändern
while True:
# ~~~~~~~~
try:
# ~~~~~~~~
#In neuem Tab öffnen
driver.execute_script("window.open()")
driver.switch_to.window(driver.window_handles[1])
driver.get("https://www.uta-net.com/" + name_url)
driver.execute_script("window.scrollTo(0, 380);") #Scrollen Sie zur Position der Texte
#Schließen Sie die vorherige Registerkarte
driver.switch_to.window(driver.window_handles[0])
driver.close()
driver.switch_to.window(driver.window_handles[0])
Nach der veränderung
while True:
# ~~~~~~~~
try:
# ~~~~~~~~
#In neuem Tab öffnen
driver.execute_script("window.open()")
driver.switch_to.window(driver.window_handles[1])
# add-start
try:
driver.get("https://www.uta-net.com/" + name_url)
except:
pass
#Scrollen Sie zur Position der Texte
driver.execute_script("arguments[0].scrollIntoView();", driver.find_element_by_id("view_kashi"))
# add-end
#Schließen Sie die vorherige Registerkarte
driver.switch_to.window(driver.window_handles[0])
driver.close()
driver.switch_to.window(driver.window_handles[0])
Es ist fast ein Bonus, aber ich habe es möglich gemacht, "Wiedergabe" und "zum nächsten Song" sogar auf dem Terminal zu steuern. Erstens ist die Grundoperation.
Grundbetrieb
music = appscript.app("Music")
#Wiedergabe
music.play()
#Pause
music.pause()
#Spielpause
music.playpause()
#Zum vorherigen Titel
music.previous_track()
#Zum nächsten Titel
music.next_track()
Verwenden Sie dies so wie es ist. Bei normaler Eingabe () ist es nicht möglich, zu warten, bis die Eingabe ausgeführt wird, und eine andere Verarbeitung durchzuführen, sodass eine Eingabe mit einer Zeitüberschreitung verwendet wurde.
Eingabe mit Timeout
from select import select
import sys
#Die Argumente lauten "Lesen", "Schreiben", "Ausnahme" und "Wartezeit", und diesmal wird nur Lesen verwendet.
#Wartezeit ist 0.Angegeben als 5 Sekunden
# 0.Wenn nach 5 Sekunden keine Eingabe erfolgt, wird eine leere Liste zurückgegeben
read, _, _ = select([sys.stdin], [], [], 0.5)
if read:
command = sys.stdin.readline().strip()
else:
command = ""
Ich werde das Obige so in den Code setzen, wie es ist.
Nach der veränderung
while True:
#Greifen Sie auf die Musik-App zu
music = appscript.app("Music")
# add-start
# ----App-Steuerung----
#Eingabe mit Timeout
read, _, _ = select([sys.stdin], [], [], 0.5)
if read:
command = sys.stdin.readline().strip()
else:
command = ""
if command == "b": #Zum vorherigen Titel
music.previous_track()
elif command == "p": #Spielpause
music.playpause()
elif command == "n": #Zum nächsten Titel
music.next_track()
# add-end
# ~~~~~~~~
Da möglicherweise nicht der gesamte Text angezeigt wird, wird automatisch ein Bildlauf durchgeführt.
Nach der veränderung
while True:
# ~~~~~~~~
if name == prev_track_name:
time.sleep(1)
# add-start
count += 1
if count % 5 == 0:
driver.execute_script(
"window.scrollTo(window.pageXOffset, window.pageYOffset + " + str(kashi_length // music_time * 5) + ");"
)
# add-end
continue
# ~~~~~~~~
#In neuem Tab öffnen
driver.execute_script("window.open()")
driver.switch_to.window(driver.window_handles[1])
try:
driver.get("https://www.uta-net.com/" + name_url)
except:
pass
#Scrollen Sie zur Position der Texte
driver.execute_script("arguments[0].scrollIntoView();", driver.find_element_by_id("view_kashi"))
# add-start
#Länge der Texte auf Seite
kashi_length = driver.find_element_by_id("view_mylink").location["y"] - \
driver.find_element_by_id("view_kashi").location["y"]
# add-end
#Schließen Sie die vorherige Registerkarte
driver.switch_to.window(driver.window_handles[0])
driver.close()
driver.switch_to.window(driver.window_handles[0])
Ermitteln Sie die Länge des Textteils auf der Seite (Textlänge / Songlänge). * 5 Scrollen Sie alle 5 Sekunden nach unten, um in einem angemessenen Tempo zu scrollen.
Konvertieren Sie zunächst das Alphabet in voller Breite in die halbe Breite. Außerdem wurde bei der Suche "genaue Übereinstimmung" in "enthält" geändert.
Nach der veränderung
while True:
# ~~~~~~~~
# ----Greifen Sie auf die Lyrics-Site zu----
#Vollwinkel bis Halbwinkel# add
name = str(name).translate(str.maketrans({chr(0xFF01 + i): chr(0x21 + i) for i in range(94)}))
name = parse.quote(name) #Prozentuale Codierung
url = "https://www.uta-net.com/search/?Aselect=2&Keyword=" + name + "&Bselect=3&x=0&y=0" # Bselect=4 zu Bselect=Bis 3
Darüber hinaus kann sich die Position des Sängernamens aufgrund des Einflusses der Kronenmarke auf die Seite mit viel Zugriff verschieben, sodass dies behoben wurde.
Nach der veränderung
while True:
# ~~~~~~~~
try:
# ~~~~~~~~
name_url = ""
flag = False
for tag_tr in tr:
a = tag_tr.find_all("a")
for i, tag_a in enumerate(a):
if i == 0: #Song Titel
name_url = tag_a.get("href")
elif i == 1 or i == 2: #Name des Sängers#Addiere 2, wo es nur 1 gab
if tag_a.string == artist:
flag = True
break
if flag:
break
import time
import sys
from select import select
import appscript
from urllib import request, parse
from bs4 import BeautifulSoup
from selenium import webdriver
driver = webdriver.Chrome(executable_path="chromedriver")
driver.get("https://www.google.com/") #Registerkarte "Initial"
driver.set_page_load_timeout(5) #Sie kann je nach Geschwindigkeit der Linie kürzer sein
music_time = 0
prev_track_name = ""
count = 0
kashi_length = 0
while True:
#Greifen Sie auf die Musik-App zu
music = appscript.app("Music")
# ----App-Steuerung----
#Eingabe mit Timeout
read, _, _ = select([sys.stdin], [], [], 0.5)
if read:
command = sys.stdin.readline().strip()
else:
command = ""
if command == "b": #Zum vorherigen Titel
music.previous_track()
elif command == "p": #Spielpause
music.playpause()
elif command == "n": #Zum nächsten Titel
music.next_track()
# ----Songtitel holen----
#Songname, Albumname, Künstlername, Songlänge abspielen
name = music.current_track.name.get()
artist = music.current_track.artist.get()
album = music.current_track.album.get()
music_time = music.current_track.time.get() # m:s str
# music_Zeit bis Sekunden
music_time = music_time.split(":")
music_time = int(music_time[0]) * 60 + int(music_time[1])
if name == prev_track_name:
time.sleep(1)
count += 1
if count % 5 == 0:
driver.execute_script(
"window.scrollTo(window.pageXOffset, window.pageYOffset + " + str(kashi_length // music_time * 5) + ");"
)
continue
prev_track_name = name
print("{} / {} / {}".format(name, artist, album))
# ----Greifen Sie auf die Lyrics-Site zu----
#Vollwinkel bis Halbwinkel
name = str(name).translate(str.maketrans({chr(0xFF01 + i): chr(0x21 + i) for i in range(94)}))
name = parse.quote(name) #Prozentuale Codierung
url = "https://www.uta-net.com/search/?Aselect=2&Keyword=" + name + "&Bselect=3&x=0&y=0"
try:
html = request.urlopen(url)
soup = BeautifulSoup(html, "html.parser")
tr = soup.find_all("tr")
name_url = ""
flag = False
for tag_tr in tr:
a = tag_tr.find_all("a")
for i, tag_a in enumerate(a):
if i == 0: #Song Titel
name_url = tag_a.get("href")
elif i == 1 or i == 2: #Name des Sängers
if tag_a.string == artist:
flag = True
break
if flag:
break
#In neuem Tab öffnen
driver.execute_script("window.open()")
driver.switch_to.window(driver.window_handles[1])
try:
driver.get("https://www.uta-net.com/" + name_url)
except:
pass
#Scrollen Sie zur Position der Texte
driver.execute_script("arguments[0].scrollIntoView();", driver.find_element_by_id("view_kashi"))
kashi_length = driver.find_element_by_id("view_mylink").location["y"] - \
driver.find_element_by_id("view_kashi").location["y"]
#Schließen Sie die vorherige Registerkarte
driver.switch_to.window(driver.window_handles[0])
driver.close()
driver.switch_to.window(driver.window_handles[0])
except:
pass
print("b:Bisherige| p:Spielpause| n:Nächster")
print()
time.sleep(1)