фильтровать get_attribute для результатов элемента

#python #selenium #get #attributes

#python #selenium #получить #атрибуты

Вопрос:

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

ids = [item.get_attribute(‘data-id’) для элемента в WebDriverWait(драйвер,30).до (EC.presence_of_all_elements_located((By.CSS_SELECTOR, «[data-id]»)))]

Ответ №1:

Вы могли бы добавить условие 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(‘тип данных’) является не «Knife», а «Нож». (пробел в конце)

Решение 1: Удалите пробелы с помощью strip():

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

Решение 2: использовать в

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

Решение 3: добавьте пробел!

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

ПРАВКА2:
Если вы хотите сопоставить несколько значений, используйте:

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

Комментарии:

1. Хм, казалось, что это сработает, но по какой-то причине, когда я иду печатать результаты, я получаю [].

2. Это означало бы, что ваше условие никогда не будет выполнено, можете ли вы поделиться HTML-кодом, с помощью которого вы пытаетесь достичь этого?

3. Опубликовал мой скрипт. Возможно, это даст вам лучший контекст.

4. В следующий раз не публикуйте свой скрипт в качестве ответа, а отредактируйте свой вопрос! Я отредактировал свой ответ с помощью моего нахождения

5. О боже. Я думаю, мне следовало еще раз проверить свой элемент, потому что он перешел на новую строку, и я не увидел пробел. Smh. Спасибо. Могу ли я добавить к этому несколько значений в виде списка?