Ich versuche, Links zu Song-Seiten für einige Künstler auf genius.com zu kratzen, aber ich habe Probleme, weil die Links zu den einzelnen Song-Seiten in einem Popup-modalen Fenster angezeigt werden.Scroll-modales Fenster mit Selenium in Python
Das modale Fenster lädt nicht alle Links auf einmal und lädt stattdessen mehr Inhalt über Ajax, wenn Sie bis zum Ende des Modals scrollen.
Ich habe versucht, Code auf dem unteren Rand der Seite blättern, aber leider, dass gerade in dem Fenster hinter dem modalen gescrollt statt der modalen selbst:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
So dann habe ich versucht, das letzte Element der Auswahl in der modal und dass das scrollen (mit dem Gedanken zu tun, dass ein paar mal, bis alle Song Seiten war geladen worden ist), aber es wäre nicht weit genug bewegen die Website, um mehr Inhalt
last_element = driver.find_elements_by_xpath('//div[@class="mini_card-metadata"]')[-1]
last_element.location_once_scrolled_into_view
Hier zu laden ist mein Code bis jetzt:
import os
from bs4 import BeautifulSoup
from selenium import webdriver
chrome_driver = "/Applications/chromedriver"
os.environ["webdriver.chrome.driver"] = chrome_driver
driver = webdriver.Chrome(chrome_driver)
base_url = 'https://genius.com/artists/Stormzy'
driver.get(base_url)
xpath_str = '//div[contains(text(),"Show all songs by Stormzy")]'
driver.find_element_by_xpath(xpath_str).click()
Gibt es eine Möglichkeit, alle Lied-Seitenlinks für den Künstler zu extrahieren?
Siehe: [Wie mache ich X?] (https://meta.stackoverflow.com/questions/253069/whats-the-appropriate-new-current-close -reason-for-how-do-i-do-x) Die Erwartung an SO besteht darin, dass der Benutzer, der eine Frage stellt, nicht nur recherchiert, um seine eigene Frage zu beantworten, sondern auch Forschung, Code-Versuche und Ergebnisse teilt. Dies zeigt, dass Sie sich die Zeit genommen haben, sich selbst zu helfen, es rettet uns davor, offensichtliche Antworten zu wiederholen, und vor allem hilft es Ihnen, eine spezifischere und relevantere Antwort zu bekommen! Siehe auch: [fragen] – JeffC