Estoy practicando web scraping usando Selenium, y espero obtener el color de este vestido. Cuando inspecciono el sitio web, puedo ver el contenido del texto en la clase 'texto del lector de pantalla', pero cuando trato de buscarlo, siempre obtengo un valor vacío. ¿Que esta pasando? ¿Será porque la web de Zara me bloquea para rasparlo? Mi código es el siguiente,
driver_path = 'D:/Python/Selenium/chromedriver' option1 = webdriver.ChromeOptions() option1.add_experimental_option('detach',True) driver = webdriver.Chrome(chrome_options=option1,executable_path=driver_path) driver.get(url) color = driver.find_element_by_xpath('//*[@id="main"]/article/div[1]/div[2]/div[1]/div[3]/ul/li[1]/button/span/span/span').textComo deseo obtener todos los colores posibles, también probé el siguiente código, que no funciona tan bien:(
colors = driver.find_elements_by_xpath('//*[@id="main"]/article/div[1]/div[2]/div[1]/div[3]/ul') col = [] for i,color in enumerate(colors): prefix = '//*[@id="main"]/article/div[1]/div[2]/div[1]/div[3]/ul' try: col.append(color.find_elements_by_xpath(prefix+f'/li[{i}]'+'/button/span/span/span').text) except: pass colAquí hay una solución de SeleniumBase que obtiene la respuesta: (SeleniumBase es un marco de Selenium Python).
from seleniumbase import BaseCase class MyTestClass(BaseCase): def test_example(self): self.open("https://www.zara.com/us/en/jacquard-mini-dress-p01198636.html?v1=140654644") elements = self.find_elements(".product-detail-color-selector__color-area span") print("\nColors:") for element in elements: print(element.get_property("textContent"))Aquí está el resultado de eso:
Colors: Ecru / Brown Printed La conclusión importante es que debe usar element.get_property("textContent") para obtener el texto porque el elemento en sí no está visible, aunque el texto aparece en el HTML. La solución también utiliza un selector más limpio para encontrar los elementos.