首页 > 解决方案 > 如何使用带有 Selenium 的 Chrome 驱动程序通过 Python 登录 Applemusic

问题描述

我正在尝试使用带有 selenium 的 Python 编写代码,该代码将登录 Applemusic。

  1. 应该打开这个 URL:https ://music.apple.com/login
  1. 之后会弹出登录框架,我希望能够输入 AppleID(例如 example@gmail.com)和密码(Apple2020)

  2. 我希望能够打开特定的歌曲网址或播放列表链接,以便我可以手动播放歌曲。

到目前为止我的代码:

from time import sleep
import Password
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
class Applemusic:
 
def __init__(self, username):
driver = webdriver.Chrome()


    driver.get("https://music.apple.com/login")
    sleep(20)
    for a in username:
        WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.ID, "aid-auth-widget-iFrame")))
        WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "account_name_text_field"))).send_keys(a)
    sleep (10)
    password = "Apple2020"
    for i in password:
        WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "password_text_field"))).send_keys(i)

Applemusic('example@gmail.com')

这是错误:

Traceback(最近一次通话最后):文件“/Users/mike/Documents/Python/Applemusic.py”,第 21 行,Applemusic('example@gmail.com')文件“/Users/mike/Documents/Python/Applemusic .py",第 14 行,在init WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.ID, "aid-auth-widget-iFrame"))) 文件 "/Users/mike/Documents/Python/ venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py”,第 80 行,直到引发 TimeoutException(消息,屏幕,堆栈跟踪) selenium.common.exceptions.TimeoutException:消息:

我不知道我做错了什么。我的python知识只是一般,如果有人能帮助我实现我的目标,我将不胜感激。

标签: pythonseleniumxpathcss-selectorsapple-music

解决方案


Apple ID字段位于嵌套元素中,<iframe>因此您必须:

  • 诱导WebDriverWait使 框架可用并切换到它

  • 诱导WebDriverWait使 框架可用并切换到它

  • 诱导WebDriverWait使所需元素成为可点击的。

  • 您可以使用以下任一定位器策略

    • 使用CSS_SELECTOR

      driver.get('https://music.apple.com/login')
      WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[src^='/includes/commerce/authenticate?product=music']")))
      WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[title^='Sign In with your Apple']")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#account_name_text_field"))).send_keys("Tycoonstory@apple.com")
      
    • 使用XPATH

      driver.get('https://music.apple.com/login')
      WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[starts-with(@src, '/includes/commerce/authenticate?product=music')]")))
      WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[starts-with(@title, 'Sign In with your Apple')]")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='account_name_text_field']"))).send_keys("Tycoonstory@apple.com")
      
  • 注意:您必须添加以下导入:

     from selenium.webdriver.support.ui import WebDriverWait
     from selenium.webdriver.common.by import By
     from selenium.webdriver.support import expected_conditions as EC
    
  • 浏览器快照:

苹果


参考

您可以在以下位置找到一些相关的讨论:


推荐阅读