2017-05-25 2 views
1

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?

+0

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

Antwort

0

Wenn Sie nach unten von modalen Dialog blättern nennen es

$scrollable_data_ctrl.load_next(); 

Als Option können Sie versuchen, es ausführen kann, bis neue Ergebnisse erscheinen in modal

driver.execute_script("$scrollable_data_ctrl.load_next();") 
0

unten Code Versuchen Sie, erforderlich Ausgabe:

Dies sollte es Ihnen ermöglichen, neue XHR bis Länge von Liederliste wurde konstant und schließlich die Liste der Links

Verwandte Themen