当前位置: 首页 > 知识库问答 >
问题:

使用硒将歌曲添加到Spotify播放列表的蟒蛇代码

白烨煜
2023-03-14

登录后,我的程序开始循环播放歌曲列表,将它们添加到我的Spotify播放列表中。但是在第一次循环之后,它引发了“陈旧元素引用:元素没有附加到页面文档”异常。我正在做的链接

driver=webdriver.Chrome()
driver.maximize_window()
actionChain = ActionChains(driver)
driver.get('https://open.spotify.com/browse/featured')
#Login Procedure
psw=''
login=driver.find_element_by_xpath("//button[2]").click()
sleep(1)
email=driver.find_element_by_id('login-username').send_keys('abc@yahoo.com')
password=driver.find_element_by_id('login-password').send_keys(psw)
login=driver.find_element_by_id('login-button').click() 

ignored_exceptions=(StaleElementReferenceException,NoSuchElementException)

def wdwfind(path):
    return WebDriverWait(driver, 15,ignored_exceptions=ignored_exceptions).until(
            EC.presence_of_element_located((By.XPATH,(path))))

def wdwclick(path):
    return WebDriverWait(driver, 15,ignored_exceptions=ignored_exceptions).until(
            EC.element_to_be_clickable((By.XPATH,(path))))


for n in range(len(songs)):
    wdwfind("//li[2]/div/a/div/span").click() #going to search tab
    wdwfind("//input").send_keys(songs[n]) #sending elements to navigation bar
    gotosong=wdwclick("//a[@class='d9eb38f5d59f5fabd8ed07639aa3ab77-scss _59c935afb8f0130a69a7b07e50bac04b-scss']") #right clicking the name of the song
    actionChain.context_click(gotosong).perform()
    wdwfind("//nav/div[4]").click() #Selecting the add to playlist option
    wdwfind("//div[@class='mo-coverArt-hoverContainer']").click() #clicking on the playlist to add the song to
    sleep(2) 
    clear=wdwclick("//input[@class='_2f8ed265fb69fb70c0c9afef329ae0b6-scss']").send_keys(Keys.SHIFT,Keys.ARROW_UP) #clearing the search box
    driver.refresh()
    sleep(1)

共有1个答案

罗寒
2023-03-14

我已经调查了你问题背后的原因。如果您试图在播放列表中添加歌曲,请找到解决方案。由于DOM中的动态元素,您面临上述问题。此外,在运行下面的代码后,我得到了一个会员窗口,因此无法继续。

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.support.ui import WebDriverWait as Wait
from selenium.webdriver.common.action_chains import ActionChains
from selenium.common.exceptions import StaleElementReferenceException
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver import ActionChains

# Open Chrome
driver = webdriver.Chrome(executable_path=r"C:\New folder\chromedriver.exe")
driver.get("https://open.spotify.com/browse/featured")





element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.XPATH, "//li[2]/div/a/div/span")))
element.click()
WebDriverWait(driver, 20).until(
EC.visibility_of_element_located((By.XPATH,"//input[@class='SearchInputBox__input']"))).send_keys("songs")


driver.find_element_by_xpath("//*[text()='Log in']").click()

WebDriverWait(driver, 20).until(
EC.visibility_of_element_located((By.XPATH,"//input[@id='login-username']"))).send_keys("")

WebDriverWait(driver, 20).until(
EC.visibility_of_element_located((By.XPATH,"//input[@id='login-password']"))).send_keys("")

WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.XPATH, "//button[@id='login-button']"))).click()

items = WebDriverWait(driver, 20).until(EC.presence_of_all_elements_located((By.XPATH, "//div[@class='react-contextmenu-wrapper']/div/div/a")))
print(len(items))


for song in items:
    print song.text
    actionChains = ActionChains(driver)

    actionChains.context_click(song).perform()
    element = WebDriverWait(driver, 10).until(
        EC.visibility_of_element_located((By.XPATH, "//*[text()='Add to Playlist']")))
    element.click()

    element12 = WebDriverWait(driver, 10).until(
        EC.visibility_of_element_located((By.XPATH, "//button[@class='btn asideButton-button btn-green btn-small']")))
    actionChains.move_to_element(element12).click().perform()
    actionChains.context_click(song).perform()
    element00=WebDriverWait(driver, 20).until(
        EC.visibility_of_element_located((By.XPATH, "//input[@class='inputBox-input']"))).send_keys("testPlayList")

    element11 = WebDriverWait(driver, 10).until(
        EC.visibility_of_element_located((By.XPATH, "//div[@class='button-group button-group--horizontal']//div[2]/button")))
    actionChains.move_to_element(element11).click().perform()

    elem=WebDriverWait(driver, 20).until(
        EC.visibility_of_element_located((By.XPATH, "//div[@class='TrackListHeader__entity-name']//span")))
    print elem.text
    break
 类似资料:
  • 使用Spotify Web API的新endpoint/播放器,我们现在可以控制Spotify客户端的播放。endpointhttps://api.spotify.com/v1/me/player/play 我们可以添加一首要播放的歌曲。 我想知道是否有一种方法可以利用新的endpoint向玩家队列中添加一首歌。我计划写一个应用程序,让多个客人请求可以在派对上通过Spotify播放的歌曲。 有人有

  • 我正在开发一个移动应用程序,可以检测iPhone和Android上各种媒体播放器播放的歌曲。我们目前支持多个应用程序在这两个平台。我们的应用程序的工作方式与Last.fm检测和自动删除播放的方式类似。 假设我对要收集其历史记录的每个用户都有spotify凭据。 谢谢

  • 我将LastFM API中的艺术家、曲目和专辑存储在一个小部件中。我想在用户单击play时播放Spotify歌曲的30秒片段。有可能这样做吗?我正在努力寻找一种方法。。尤其是在没有用户身份验证/权限的情况下。 Spotify应用程序API:播放专辑中的特定曲目 这看起来很有希望,但我不确定这是否是我所说的。。。 如果有人能给我指出正确的方向(使用什么样的API调用),那就太好了!我可以从那里找到剩

  • 所以我用javafx制作了一个mp3播放器,它有一个,在这里我拖放歌曲,然后选择一首歌曲并按play播放,你就明白了。问题是,用我当前的代码,我不能播放两首以上歌曲的序列:/(播放选定的歌曲,播放它旁边的歌曲,然后停止)。代码如下:

  • 这就是我在做“python-V”时得到的结果 Python 2.7.11::Anaconda 2.4.0(64位)我通常使用我的终端来玩IDLE。但现在我也安装了空闲shell。 我尝试导入sys;sys.path两者。它们抛出不同的路径。我的终端返回了包含蟒蛇的路径。 我试着按照这些步骤安装一个模块。 > python设置。py sdist sudo python安装程序。py安装 然后我打开闲

  • 我正在尝试集成web API来获取当前正在播放/最近播放的歌曲。但是,我无法生成具有范围(user-read-one-play,user-read-report-state)的令牌。 我关注这个链接是为了引用Spotify。https://developer.spotify.com/web-api/authorization-guide/ 我得到了超文本标记语言响应。 请帮忙。非常感谢。