Есть ли способ упорядочить значения нескольких текстов и атрибутов одного элемента?Python

Программы на Python
Anonymous
Есть ли способ упорядочить значения нескольких текстов и атрибутов одного элемента?

Сообщение Anonymous »

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

Код: Выделить всё

parent = driver.find_element(By.XPATH, "//*") # main post element
child = parent.find_elements(By.XPATH, ".//*") # child containing texts/emojis/links/images
for i in child:
if i.text is not None:
post.append(i.get_attribute('textContent'))
if i.get_attribute('alt') is not None:
post.append(i.get_attribute('alt'))
text = ''.join(post)
print(text)
Я в основном реконструирую сообщение, получая textContent и alt по мере их обнаружения и перечисления с помощью find_elements. Если дочерний элемент содержит текст, будет получен текст, если нет, будет получен alt для эмодзи/изображений.
Все содержимое сообщения может быть получено. можно получить с помощью get_attribute, поскольку каждый текст и смайлик находятся внутри дочернего элемента. Однако я столкнулся со структурой, в которой есть только один дочерний элемент(), содержащий весь текст и alt. Пример ниже:

Код: Выделить всё




#link1 

"A "



"B "




"C "

#link2

"D "



"E"



Можно ли воплотить идею //text() или //*[@img='alt'] в жизнь? Кажется, использование find_elements с By.XPATH, //text() не разрешено.
Ожидаемый результат:

Код: Выделить всё

#link1 A :) B C #link2 D :( E
Проверено:

Код: Выделить всё

    parent = driver.find_element(By.XPATH, "//*") # main post element
child = parent.find_elements(By.XPATH, ".//*[contains(@class, 'html-span')]//*") # child containing texts/emojis/links/images
for i in child:
print(i.get_attribute('textContent'))
if i.text is not None:
post.append(i.get_attribute('textContent'))
if i.get_attribute('alt') is not None:
post.append(i.get_attribute('alt'))
print(post)
text = ''.join(post)
print(text)
Результат:
[#link, '', :), '', '', #link2, '', :(, ''] # пропущенный текст ребенка

Код: Выделить всё

    parent = driver.find_element(By.XPATH, //span[@class='post']")
print(parent.get_attribute('textContent'))
Результат:

Код: Выделить всё

#link1 A B C #link2 D E
# отсутствует атрибут alt
Я пытаюсь сгруппировать каждый класс абзацев и составить из них предложения. Но иметь возможность получить и атрибут, и текст всего сообщения по порядку вполне достаточно.
Любая идея о том, как действовать, будет очень признательна.

Подробнее здесь: https://stackoverflow.com/questions/788 ... ingle-elem

Вернуться в «Python»