Я очищаю веб-сайт, на котором у меня есть повторяющиеся значения с разным числом значений.
Пример одного элемента div выглядит следующим образом:
<div class = "lang">
<i class = "flag fr" qtip-tooltip = "Français"></i>
<i class = "flag nl" qtip-tooltip = "Néerlandais"></i>
<i class = "flag gb" qtip-tooltip = "Anglais"></i>
<i class = "flag it" qtip-tooltip = "Italien"></i>
</div>
Я хотел бы получить list всех значений gtip-tooltip в строке или списке для каждого div. Как я могу это сделать?
Я попытался
langs = driver.find_elements(by=By.XPATH,value='//div[@class = "lang"]')
но я получаю пустые строковые значения.






Пытаться :
elements = driver.find_elements_by_css_selector('div.lang')
Затем вы можете получить доступ к своим элементам, зациклив свою переменную:
For element in elements :
print(element)
Вы очень близки к своей цели — для ее достижения просто выполните итерацию по ResultSet из langs, найдите все <i> элементы для каждого <div> и извлеките их атрибуты при повторной итерации:
langs = driver.find_elements(By.XPATH,'//div[@class = "lang"]')
for lang in langs:
tooltips = [l.get_attribute('qtip-tooltip') for l in lang.find_elements(By.XPATH,'.//i')]
## as list
print(tooltips)
## as comma separated string
print(','.join(tooltips))
['Français', 'Néerlandais', 'Anglais', 'Italien']
или
Français,Néerlandais,Anglais,Italien
Чтобы объединить все языки div как один list или лучше set с уникальными значениями, вы можете использовать:
set(l.get_attribute('qtip-tooltip') for l in driver.find_elements(By.XPATH,'//div[@class = "lang"]/i'))
Выход
{'Anglais', 'Français', 'Italien', 'Néerlandais'}
Извините, это была моя ошибка при переносе -
xpathдля выбораlang.find_elements(By.XPATH,'.//i')нужно начинать с., чтобы избежать описанного вами поведения. Что значит он должен начинаться именно в этомdivа не во всем документе точно.