You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Olá caro Lucas, eu estou fazendo um projeto de chatbot no whatsapp web e como mencionei, consegui criar uma função para reconhecer o número do contato isso enquanto o chat estiver aberto, e também para reconhecer o número de uma pessoa no grupo, na verdade o número da pessoa a mandar a ultima mensagem. Pretendo usar isso para saber com quem o bot tá falando, no meu caso para dar permissão de certas coisas apenas a n;úmeros específicos e também para usar o número como um ID para indentificar os players do meu RPG.
Vou mostrar o meu código e explicar por partes, pode ser um pouco confuso porque sou um iniciante mas acredito que dê pra entender, se puder comentar algo que devo melhorar apenas dizer.
def get_number(self):
'''Pega o numero da ultima mensagem do chat/grupo que está aberto por meio dos xpaths'''
time.sleep(0.25)
try:
try:
#pega todos os elementos (aquele nome em do contato que fica na mensagem no grupo)
#no whatsapp pt-br ele fica com esse texto dentro do elemento da classe _3B19s, acredito que dê pra adaptar pra inglês
xpath_numero = "//div[@class='_3B19s']//*[contains(@aria-label, 'Abrir os dados da conversa com')]"
elements = self.browser.find_elements(By.XPATH, xpath_numero)
#clica no último, sendo assim, clica no elemento da ultima mensagem.
last = elements[-1]
last.click()
time.sleep(0.5)
except:
#xpath da caixa de contato, a que fica em cima do chat e tem os detalhes do contato
details = self.browser.find_element(By.CLASS_NAME, '_2au8k')
details.click()
time.sleep(0.5)
# Inicializa uma lista de XPath a serem tentados em ordem, esses Xpaths são onde tem o número de telefone
# os xpaths são diferentes pois no whatsapp ele difere de contato salvo, não salvo e comercial assim os números ficam em lugares diferentes
xpath_list = [
'//span[@class="_11JPr selectable-text copyable-text"]//span[@class="enbbiyaj e1gr2w1z hp667wtd"]',
'//div[@class="Mk0Bp _30scZ"]/span[@class="l7jjieqr cw3vfol9 _11JPr selectable-text copyable-text"]',
'//span[@class="_11JPr selectable-text copyable-text"]//span[@class="fe5nidar fs7pz031 tl2vja3b e1gr2w1z"]']
# Inicializa uma lista para armazenar os números de telefone encontrados
numeros_de_telefone = []
# Itera sobre os XPath
for xpath_numero in xpath_list:
try:
#se achar nesses xpath um texto que tenha a formatação de um número de telefone (atualmente só funcionou pra números PT-BR)
#ele vai colocar dentro da lista e se achar algum ele para o loop
elemento_numero = self.browser.find_element(By.XPATH, xpath_numero)
texto_numero = elemento_numero.text
# Define a expressão regular para extrair números de telefone
padrao_telefone = re.compile(r'\+\d{2} \d{2} \d{4,5}-\d{4}')
# Encontra números de telefone usando a expressão regular
numeros_de_telefone = padrao_telefone.findall(texto_numero)
# Se encontrou o número, sai do loop
if numeros_de_telefone:
break
except:
# Se não encontrou o elemento, continua para o próximo XPath
continue
#números de telefone encontrados
number = numeros_de_telefone[0]
xpath_botao_fechar = self.browser.find_element(By.XPATH, '//div[@role="button" and @aria-label="Fechar"]')
xpath_botao_fechar.click()
return number`
Explicando de onde tirei os xpaths:
Pra pegar o número de alguém que mandou a ultima mensagem no grupo eu peguei a classe do chat todo, no caso somente onde tem as mensagens e procuro pelo elemento que possua na aria-label 'Abrir os dados da conversa com', que cai diretamente no ícone onde tem a foto ou a letra inicial do contato/número, sendo ele conhecido ou não, o comando faz com que ele procure todos esses ícones e ao clicar abre a área de dados do contato que mandou a ultima mensagem.
Se ele não conseguir achar o ícone no chat quer dizer que a conversa é privada, então ao dar except (ele não encontrou nenhum ícone) ele vai clicar na área onde tem os detalhes do contato, a região em cima como você já fez no def que pega dados do contato.
Eu utilizei isso também para fazer o bot reconhecer qual conversa é privada ou em grupo, pode ser útil.
try:
#pega todos os elementos (aquele nome em do contato que fica na mensagem no grupo)
#no whatsapp pt-br ele fica com esse texto dentro do elemento da classe _3B19s, acredito que dê pra adaptar pra inglês
xpath_numero = "//div[@class='_3B19s']//*[contains(@aria-label, 'Abrir os dados da conversa com')]"
elements = self.browser.find_elements(By.XPATH, xpath_numero)
#clica no último, sendo assim, clica no elemento da ultima mensagem.
last = elements[-1]
last.click()
time.sleep(0.5)
except:
#xpath da caixa de contato, a que fica em cima do chat e tem os detalhes do contato
details = self.browser.find_element(By.CLASS_NAME, '_2au8k')
details.click()
time.sleep(0.5)
# Inicializa uma lista de XPath a serem tentados em ordem, esses Xpaths são onde tem o número de telefone
# os xpaths são diferentes pois no whatsapp ele difere de contato salvo, não salvo e comercial assim os números ficam em lugares diferentes
Depois disso eu tenho a parte dos xpaths_list.
Basicamente no whatsapp web o número fica em 3 lugares e em 3 tipos de contato, o contato conhecido, o desconhecido e o comercial, esses xpaths são dos três, ao abrir os dados do contato ele vai procurar pelo texto que se enquadre no número de telefone nesses três lugares até achar o número.
Contato conhecido:
Contato Desconhecido
Contato Comercial
Agora o programa vai pra parte onde ele verifica cada um desses 3 lugares procurando pelo número.
Depois fiz ele clicar no botão fechar passando o xpath
xpath_botao_fechar = self.browser.find_element(By.XPATH, '//div[@role="button" and @aria-label="Fechar"]') xpath_botao_fechar.click()
Por enquanto é isso, eu não utilizo o AWP porque quis fazer por mim mesmo mas me inspiro no teu projeto, forças mano e um grande abraço.
The text was updated successfully, but these errors were encountered:
Olá caro Lucas, eu estou fazendo um projeto de chatbot no whatsapp web e como mencionei, consegui criar uma função para reconhecer o número do contato isso enquanto o chat estiver aberto, e também para reconhecer o número de uma pessoa no grupo, na verdade o número da pessoa a mandar a ultima mensagem. Pretendo usar isso para saber com quem o bot tá falando, no meu caso para dar permissão de certas coisas apenas a n;úmeros específicos e também para usar o número como um ID para indentificar os players do meu RPG.
Vou mostrar o meu código e explicar por partes, pode ser um pouco confuso porque sou um iniciante mas acredito que dê pra entender, se puder comentar algo que devo melhorar apenas dizer.
Explicando de onde tirei os xpaths:
Pra pegar o número de alguém que mandou a ultima mensagem no grupo eu peguei a classe do chat todo, no caso somente onde tem as mensagens e procuro pelo elemento que possua na aria-label 'Abrir os dados da conversa com', que cai diretamente no ícone onde tem a foto ou a letra inicial do contato/número, sendo ele conhecido ou não, o comando faz com que ele procure todos esses ícones e ao clicar abre a área de dados do contato que mandou a ultima mensagem.
Se ele não conseguir achar o ícone no chat quer dizer que a conversa é privada, então ao dar except (ele não encontrou nenhum ícone) ele vai clicar na área onde tem os detalhes do contato, a região em cima como você já fez no def que pega dados do contato.
Eu utilizei isso também para fazer o bot reconhecer qual conversa é privada ou em grupo, pode ser útil.
Depois disso eu tenho a parte dos xpaths_list.
Basicamente no whatsapp web o número fica em 3 lugares e em 3 tipos de contato, o contato conhecido, o desconhecido e o comercial, esses xpaths são dos três, ao abrir os dados do contato ele vai procurar pelo texto que se enquadre no número de telefone nesses três lugares até achar o número.
Contato conhecido:
Contato Desconhecido
Contato Comercial
Agora o programa vai pra parte onde ele verifica cada um desses 3 lugares procurando pelo número.
Depois fiz ele clicar no botão fechar passando o xpath
xpath_botao_fechar = self.browser.find_element(By.XPATH, '//div[@role="button" and @aria-label="Fechar"]') xpath_botao_fechar.click()
Por enquanto é isso, eu não utilizo o AWP porque quis fazer por mim mesmo mas me inspiro no teu projeto, forças mano e um grande abraço.
The text was updated successfully, but these errors were encountered: