#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. Спасибо. Могу ли я добавить к этому несколько значений в виде списка?