find_elements_by_xpath иногда возвращает пустой список? - PullRequest
1 голос
/ 17 июня 2020

Итак, я работаю над программой, которая будет извлекать информацию из Grailed (https://www.grailed.com/), и моя проблема в том, что иногда мой вызов селена возвращает нужные мне данные, но иногда возвращает пустой список. Я новичок в Selenium и просто пытаюсь понять, как он работает, я не могу найти шаблон, когда он возвращает пустой список, поэтому я как бы в тупике.

from selenium import webdriver

driver = webdriver.Chrome("Path to Chromedriver")
driver.get('https://www.grailed.com/designers/jordan-brand/hi-top-sneakers')

item = driver.find_elements_by_xpath('//html/body/div[3]/div[6]/div[3]/div[3]/div[2]/div[2]/div[1]/a/div[3]/div[1]/p[1]')
print(item)

Я бы подумал, что элемент, указанный xpath, изменяется, когда вы снова загружаете страницу, но xpath остается прежним, поэтому я не думаю, что это так. Кто-нибудь знает, почему это непоследовательно в его возврате, и как я могу это исправить?

1 Ответ

1 голос
/ 18 июня 2020

Вызвать WebDriverWait () и дождаться visibility_of_all_elements_located () и ниже xpath.

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver=webdriver.Chrome("Path to Chromedriver")
driver.get("https://www.grailed.com/designers/jordan-brand/hi-top-sneakers")
elements=WebDriverWait(driver,10).until(EC.visibility_of_all_elements_located((By.XPATH,"//div[@class='feed-item']//div[@class='listing-designer-and-size']/p[@class='listing-designer truncate']")))
itemlist=[item.text for item in elements ]
print(itemlist)

Вывод :

['JORDAN BRAND', 'JORDAN BRAND', 'JORDAN BRAND', 'JORDAN BRAND', 'JORDAN BRAND', 'JORDAN BRAND × NIKE', 'JORDAN BRAND', 'JORDAN BRAND', 'JORDAN BRAND', 'JORDAN BRAND × NIKE', 'JORDAN BRAND', 'JORDAN BRAND × NIKE', 'JORDAN BRAND', 'JORDAN BRAND', 'JORDAN BRAND', 'JORDAN BRAND × NIKE', 'JORDAN BRAND × NIKE', 'JORDAN BRAND', 'JORDAN BRAND × NIKE', 'JORDAN BRAND × NIKE', 'JORDAN BRAND', 'JORDAN BRAND × NIKE', 'JORDAN BRAND', 'JORDAN BRAND', 'JORDAN BRAND', 'JORDAN BRAND', 'JORDAN BRAND', 'JORDAN BRAND', 'JORDAN BRAND × NIKE', 'JORDAN BRAND', 'JORDAN BRAND', 'JORDAN BRAND', 'JORDAN BRAND', 'JORDAN BRAND × NIKE', 'JORDAN BRAND × NIKE', 'JORDAN BRAND', 'JORDAN BRAND', 'JORDAN BRAND × NIKE × VINTAGE', 'JORDAN BRAND', 'JORDAN BRAND']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...