Python не могу найти xpath для прокрутки спойти - PullRequest
3 голосов
/ 23 апреля 2020

The scroll box is on the side Итак, в основном я изучаю python и подумал, что было бы интересно создать бота, который входит в Spotify и возвращает вам песни, которые вам понравились, но не включены в плейлист. У Spotify есть некоторая странная особенность в плеере, которая не позволяет вам проверять определенный элемент c, поэтому мне нужно поискать в инспекторе, чтобы найти поле прокрутки в любимых песнях. Я пытаюсь сохранить путь к scroll_box, но он просто отправляет обратно:

Message: no such element: Unable to locate element: {"method":"css selector","selector":".scroller.context-event"}
  (Session info: chrome=81.0.4044.113)

Я пробовал так много вариантов find_element_by и так много путей, и я не могу его получить. В конце мне нужно прокрутить поле вниз и загрузить все песни, а затем я буду работать оттуда. Вот мой код:

from selenium import webdriver
from time import sleep
from secrets import pw2
from secrets import email
import selenium
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

class Spotbot:
    def __init__(self, email, username, pw2):
        self.driver = webdriver.Chrome()
        self.driver.get('https://spotify.com')
        self.driver.maximize_window()
        sleep(1)
        self.driver.find_element_by_xpath("//a[contains(text(), 'Log In')]")\
            .click()
        sleep(1)
        self.driver.find_element_by_xpath("//input[@name=\"username\"]")\
            .send_keys(email)
        self.driver.find_element_by_xpath("//input[@name=\"password\"]")\
            .send_keys(pw2)
        self.driver.find_element_by_xpath("//button[contains(text(), 'Log In')]")\
            .click()
        sleep(2)
        self.driver.get('https://open.spotify.com/collection/tracks')
        sleep(2)
        #scroll_box = self.driver.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[4]/div[1]/div/div[2]/div[1]/section/div/div/div[2]/section/ol')
        page = self.driver.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[4]/div[1]/div/div[2]/div[1]/section/div/div/div[2]')
        self.driver.execute_script("""arguments[0].scrollTo(0, arguments[0].scrollHeight);""", page)
        sleep(10)



Spotbot(email, 'kallen_selby', pw2)

Вот ссылка на поле прокрутки: https://open.spotify.com/collection/tracks Просьба помочь мне действительно потерялся ...

Ответы [ 2 ]

2 голосов
/ 23 апреля 2020

Вы можете прокручивать, используя javascript, не зная, что вы подразумеваете под 'полем прокрутки':

#Specific height (1080 pixel in my monitor)
driver.execute_script("window.scrollTo(0, 1080);")

#Bottom of page
page = driver.find_element_by_xpath('/html')
driver.execute_script("""arguments[0].scrollTo(0, arguments[0].scrollHeight);""", page)
0 голосов
/ 23 апреля 2020

хорошо, я нашел решение моей собственной проблемы:)

from selenium import webdriver
from time import sleep
from secrets import pw2
from secrets import email
import selenium
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

class Spotbot:
    def __init__(self, email, username, pw2):
        self.driver = webdriver.Chrome()
        self.driver.get('https://spotify.com')
        self.driver.maximize_window()
        self.username = username
        self.email = email
        sleep(1)
        self.driver.find_element_by_xpath("//a[contains(text(), 'Log In')]")\
            .click()
        sleep(1)
        self.driver.find_element_by_xpath("//input[@name=\"username\"]")\
            .send_keys(email)
        self.driver.find_element_by_xpath("//input[@name=\"password\"]")\
            .send_keys(pw2)
        self.driver.find_element_by_xpath("//button[contains(text(), 'Log In')]")\
            .click()
        sleep(2)

    def get_liked_songs(self):
        self.driver.get('https://open.spotify.com/collection/tracks')
        sleep(2)
        #(/html/body/div[3]/div/div[3]/div[4]/div[1]/div/div[2])
        scroll_box = self.driver.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[4]/div[1]/div')
        last_ht, ht = 0, 1
        while last_ht != ht:
            last_ht = ht
            sleep(1)
            ht = self.driver.execute_script("""
                arguments[0].scrollTo(0, arguments[0].scrollHeight); 
                return arguments[0].scrollHeight;
                """, scroll_box)
        sleep(1)
        liked_songs= scroll_box.find_elements_by_tag_name('a')
        songs= [name.text for name in liked_songs if name != '']
        print(songs)






my_bot = Spotbot(email, 'kallen_selby', pw2)
my_bot.get_liked_songs()

, поэтому мне просто нужно было создать резервную копию xpath, а затем использовать некоторое время l oop для прокрутки, пока я не смогу больше .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...