фильтр get_attribute для результатов элемента - PullRequest
0 голосов
/ 15 марта 2019

В настоящее время я использую get_attribute, чтобы получить все экземпляры data-id на странице, как только они загрузятся.Но я пытаюсь понять, как я могу отфильтровать некоторые из этих результатов.Особенно те, у которых есть определенные значения для их атрибута типа данных.Есть ли в любом случае я мог бы сделать это?

ids = [item.get_attribute ('data-id') для элемента в WebDriverWait (драйвер, 30) .until (EC.presence_of_all_elements_located ((By.CSS_SELECTOR), "[data-id]")))]

1 Ответ

0 голосов
/ 15 марта 2019

Вы можете добавить условие if к вашему списку:

if item.get_attribute('data-type') == "yourValue"

Тогда это будет выглядеть так:

els = WebDriverWait(driver,30).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "[data-id]")))
ids = [item.get_attribute('data-id') 
       for item in els if item.get_attribute('data-type') == "yourValue"]

РЕДАКТИРОВАТЬ:
Значение item.get_attribute(«тип данных») - это не «Нож», а «Нож».(пробел в конце)

Solution1: Удалить пробелы, используя strip ():

if item.get_attribute('data-type').strip() == "Knife"

Solution2: использовать в

 if "Knife" in item.get_attribute('data-type')

Solution3: добавить пробел!

if item.get_attribute('data-type') == "Knife "

EDIT2: если вы хотите сопоставить несколько значений, используйте:

accepted_type = ("Knife", "Knife2",...)
if item.get_attribute('data-type').strip() in accepted_type
...