#python #python-3.x #list #selenium #selenium-webdriver
Вопрос:
если это сообщение «🌿 ты 👹», то я хочу вывести его как
🌿
you
👹
это html — код этого сообщения
<div tabindex="0" class="_2wUmf _21bY5 message-in focusable-list-item"
data-id="false_918779534186@c.us_2202BFA91F450D398715D5470DD09FE3"><span></span>
<div class="cvjcv _1Ilru">
<div class="Nm1g1 _22AX6">
<div class="_22Msk">
<div class="copyable-text" data-pre-plain-text="[6:57 pm, 19/08/2021] Diksha: ">
<div class="_1Gy50">
<span dir="ltr" class="i0jNr selectable-text copyable-text">
<span>
<img crossorigin="anonymous"
src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
alt="🌿" draggable="false" class="b22 emoji wa i0jNr selectable-text copyable-text"
data-plain-text="🌿" style="background-position: 0px -80px;">
" you "
<img crossorigin="anonymous"
src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
alt="👹" draggable="false" class="b60 emoji wa i0jNr selectable-text copyable-text"
data-plain-text="👹" style="background-position: -60px -40px;">
</span>
</span>
</div>
</div>
</div>
</div>
</div>
</div>
я попробовал это
chats = driver.find_elements_by_class_name("message-in")
for i in range(0,len(chats)):
messages = chats[i].find_elements_by_class_name("i0jNr")
for msg in messages:
if msg.text == "" :
emoji = chats[i].find_element_by_class_name("emoji")
print(emoji.get_attribute('alt'))
else:
print(msg.text)
но это дает результат в виде
you
🌿
🌿
результат должен быть
🌿
you
👹
я устал от цикла для смайликов, но он печатает дважды каждый смайлик, если в сообщении два смайлика, и трижды каждый смайлик, если в сообщении три смайлика
, может ли кто-нибудь мне помочь ?
Комментарии:
1. Его можно использовать
beautifulsoup
?2. да, вы можете использовать beatifulsoup и дать мне решение на самом деле я не знаю beatifulsoup, но я знаю основы этого @Andrej Kesely
Ответ №1:
Решение с beautifulsoup
:
from bs4 import BeautifulSoup
html_doc = """
<div tabindex="0" class="_2wUmf _21bY5 message-in focusable-list-item"
data-id="false_918779534186@c.us_2202BFA91F450D398715D5470DD09FE3"><span></span>
<div class="cvjcv _1Ilru">
<div class="Nm1g1 _22AX6">
<div class="_22Msk">
<div class="copyable-text" data-pre-plain-text="[6:57 pm, 19/08/2021] Diksha: ">
<div class="_1Gy50">
<span dir="ltr" class="i0jNr selectable-text copyable-text">
<span>
<img crossorigin="anonymous"
src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
alt="🌿" draggable="false" class="b22 emoji wa i0jNr selectable-text copyable-text"
data-plain-text="🌿" style="background-position: 0px -80px;">
" you "
<img crossorigin="anonymous"
src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
alt="👹" draggable="false" class="b60 emoji wa i0jNr selectable-text copyable-text"
data-plain-text="👹" style="background-position: -60px -40px;">
</span>
</span>
</div>
</div>
</div>
</div>
</div>
</div>
"""
soup = BeautifulSoup(html_doc, "html.parser")
# search text:
text = soup.select_one(".copyable-text")
# convert all <img> to plain text:
for tag in text.select("[data-plain-text]"):
tag.replace_with(tag["data-plain-text"])
# get all non-empty lines:
all_text = [t.strip().strip('"') for t in text.find_all(text=True) if t.strip()]
print("n".join(all_text))
С принтами:
🌿
you
👹
Комментарии:
1. это работает , братан, Но можем ли мы использовать этот bs4 для динамических случаев, то есть мы напечатали это в нашем терминале, потому что у нас был html-код этого . как будто я хочу сказать, что хочу получать все сообщения из чата WhatsApp, подобного этому . Так как же я могу это сделать? @Андрей Кесели
2. @PranavPatil, если я вас правильно понял, вы можете подавать
driver.page_source
BeautifulSoup(driver.page_source, "html.parser")
, а затем использовать bs4