Python Selenium xpath ul / li?
Hallo Zusammen,
ich versuche aktuell über Selenium eine Website auszulesen. Zum Auslesen nutze ich Selenium xpath. Es geht um folgende Bespielseite: https://www.westernwelt.com/Cowboyhut-3X-von-Resistol-aus-Filz_1
Der von Chrome kopierte xpath lautet:
//*[@id="product-offer"]/div[2]/div/div[2]/div[2]/div/dl/dd[2]/div/div/div/ul/li[3]/a/span/span/span
Sobald in diesem Pfad ein ...ul/li/... vorkommt bekomme ich keine Ergebnisse mehr. Wo ist hier mein Denkfehler?
from selenium import webdriver
from selenium.webdriver.common.by import By#
url= 'https://www.westernwelt.com/Cowboyhut-3X-von-Resistol-aus-Filz_1'
driver = webdriver.Chrome()
driver.get(url)
xpath = '//*[@id="product-offer"]/div[2]/div/div[2]/div[2]/div/dl/dd[2]/div/div/div/ul/li[3]/a/span/span/span'
elements = driver.find_element(by=By.XPATH, value=xpath)
1 Antwort
Das Problem bei deinem Programm ist, dass die ul noch nicht geladen ist (also noch nicht auf das dropdown menü geklickt).
Man kann den Fehler beheben, wenn man zuerst auf das Dropdown Menü klickt und erst dann den Content von der ul rausliest.
Also eine Möglichkeit zu deinem Problem:
from selenium import webdriver
from selenium.webdriver.common.by import By
url= 'https://www.westernwelt.com/Cowboyhut-3X-von-Resistol-aus-Filz_1'
driver = webdriver.Chrome(executable_path = r'selenium_webdriver\chromedriver.exe')
driver.get(url)
while True:
try:
driver.find_elements(By.XPATH,"//button[contains(@class, 'btn dropdown-toggle btn-light')]")[1].click()
break
except Exception:
pass
text_contents = [el.text for el in driver.find_elements(By.XPATH,"//ul[contains(@class, 'dropdown-menu inner show')]")]
for text in text_contents:
print(text)
Wenn du noch weitere Fragen hast, dann kannst du mir sie gerne stellen.
LG