Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-07-2022
azdin azdin is offline
Registrado
 
Registrado: dic 2013
Posts: 7
Poder: 0
azdin Va por buen camino
Question Problema al enviar PDF's vía WhatsApp Web

Hola comunidad, espero todos estén teniendo un excelente día

Para poner en contexto, me solicitaron que desarrollé un programa que guarde reportes de notas de estudiantes hechos en Excel en PDF y después estos sean enviados vía WhatsApp a los respectivos padres de los mismos. En teoría muy sencillo ya que todo estaba ordenado por códigos y números telefónicos en hojas de Excel. Guardar los reportes en PDF fue muy sencillo, una simple macro en VBA. El problema comenzó para enviar los PDF's por WhatsApp Web. Como debía enviar un mensaje a un número x desde el vamos usé el clic para chatear para el texto, pero tenía que ver la forma de enviar los archivos.

Opte por hacerlo apoyado por Selenium trabajando directamente en VBA desde Excel. En principio bien, me apoye del siguiente vídeo
Automate Image PDF Videos Upload Via WhatsApp - YOUTUBE

Pero después empezaron los problemas. De por sí no era eficiente con los tiempos de espera entre evento, es decir no se detectaba cuando ya había cargado la página o cuando ya el PDF se había terminado de subir para poder cambiar a otro número. También había problemas con la actualización de versiones de Chrome, Chromiun y Selenium. Por último lo más evidente cada vez que se quería trabajar en otra PC se debían instalar todos los componentes. La verdad un caos!

Así que me plantee hacer el mismo programa pero con Delphi, teniendo la ventaja del navegador incorporado. Bastaría con crear los PDF's desde Excel. Después seleccionar las carpetas donde están guardados e indicar la lista de códigos y números de WhatsApp.

Al menos eso pensé... Bueno de por sí el navegador de Delphi no soporta WhatsApp Web, así que procedí a instalar la versión más reciente que encontré del Componente Chromiun para Delphi. Aquí todo bien, después era solo cargarla la URL y ejecutar JS para que se dé Clic en los respectivos botones de envío. Tuve problemas para indicar el Path del archivo tal como se hacía en Selenium

Código:
driver.FindElementByXPath("//input[@accept='image/*,video/mp4,video/3gpp,video/quicktime']").SendKeys (filepath)
Así que opte por en vez de pasar las teclas directamente al elemento HTML, darle clic y enviar las pulsaciones con SendKeys hecho en Delphi.

Código Delphi [-]
 

procedure SendKeys(const S: String);
var
  InputEvents: PInput;
  I, J: Integer;
begin
  if S = '' then Exit;
  GetMem(InputEvents, SizeOf(TInput) * (Length(S) * 2));
  try
    J := 0;
    for I := 1 to Length(S) do
    begin
      InputEvents[J].Itype := INPUT_KEYBOARD;
      InputEvents[J].ki.wVk := 0;
      InputEvents[J].ki.wScan := Ord(S[i]);
      InputEvents[J].ki.dwFlags := KEYEVENTF_UNICODE;
      InputEvents[J].ki.time := 0;
      InputEvents[J].ki.dwExtraInfo := 0;
      Inc(J);
      InputEvents[J].Itype := INPUT_KEYBOARD;
      InputEvents[J].ki.wVk := 0;
      InputEvents[J].ki.wScan := Ord(S[i]);
      InputEvents[J].ki.dwFlags := KEYEVENTF_UNICODE or KEYEVENTF_KEYUP;
      InputEvents[J].ki.time := 0;
      InputEvents[J].ki.dwExtraInfo := 0;
      Inc(J);
    end;
    SendInput(J, InputEvents[0], SizeOf(TInput));
  finally
    FreeMem(InputEvents);
  end;
end;



///

  SendKeys('C:\Users\Administrador\Desktop\Reporte.pdf');
  Delay(2500);
  keybd_event(VK_RETURN, 0,0, 0);
  keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);
  Delay(4000);

Y efectivamente ya enviaba el PDF, el problema es en las acciones anteriores. Ya que en WhatsApp Web para que cargue el cuadro de Dialogo para Insertar el Archivo primero se debe dar Clic en el Botón "Adjuntar" Y después Clic en "Documento"


Aquí como mencioné ejecuto JS para hacer el manejo de elementos. Claro, le paso el JS minificado.

Código Delphi [-]
Chromium1.Browser.MainFrame.ExecuteJavaScript(StringReplace('var eventFire=(b,c)=>{var...

Y bueno aquí es donde empieza el problema, ya que cuando empieza la secuencia en el primer recorrido ejecuta el primer botón "Adjuntar" pero no da clic al segundo botón de "Documento" y por ende no carga el cuadro de dialogo y no se envía el documento.

Cuando empieza el segundo recorrido, probablemente como ya quedó pulsado el primer botón ahora ya pulsa el segundo botón y se envía el PDF. Pero claro poniendo esto en bucle lo que ocasiona es que envía dejando un Reporte. Bueno esto probandolo sin cambiar de URL's porque si fuera el caso se reiniciaría el sitio y nunca enviaría ningún PDF.

En pocas palabras, no llega a enviar el PDF, por más que ya he probado los códigos JS desde la consola en Chrome y aquí sí ejecuta ambos botones correctamente.


El código JS que estoy usando para dar Clic en los botones es

Código:
var eventFire = (MyElement, ElementType) => {
    var MyEvent = document.createEvent("MouseEvents");
    MyEvent.initMouseEvent
     (ElementType, true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
    MyElement.dispatchEvent(MyEvent);
};

eventFire(document.querySelector('div[title="Adjuntar"]'), 'click');
Código:
var eventFire = (MyElement, ElementType) => {
    var MyEvent = document.createEvent("MouseEvents");
    MyEvent.initMouseEvent
     (ElementType, true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
    MyElement.dispatchEvent(MyEvent);
};

eventFire(document.querySelector('button[aria-label="Documento"]'), 'click');
Adjunto el archivo donde estuve haciendo las pruebas para que puedan hacer sus observaciones y gracias de antemano me puedan ayudar en lo que debo mejorar para que pueda funcionar correctamente.

Muchas Gracias
Archivos Adjuntos
Tipo de Archivo: zip Duda Delphi WhatsApp.zip (5,1 KB, 12 visitas)
Responder Con Cita
  #2  
Antiguo 11-07-2022
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.549
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Una pregunta.
¿Estás trabajando con WhatsApp Business API?
(diseñado específicamente para lo que necesitas)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 11-07-2022
lucho6007 lucho6007 is offline
Miembro
 
Registrado: ene 2009
Ubicación: Junín, pcia de BsAs, Argentina
Posts: 82
Poder: 16
lucho6007 Va por buen camino
WPP4Delphi

Hola!
Podés usar, en cambio, WPP4Delphi (https://github.com/wppconnect-team/WPP4Delphi), permite incluso leer mensajes desde una aplicación Delphi de escritorio.
Recomiendo su uso.


Saludos
Responder Con Cita
  #4  
Antiguo 14-07-2022
azdin azdin is offline
Registrado
 
Registrado: dic 2013
Posts: 7
Poder: 0
azdin Va por buen camino
Respuesta a lucho6007

Hola muchas gracias por tu respuesta, estuve revisando y me parece un proyecto bastante interesante.
Instale los componentes y cuando fui a ejecutar la Demo me salieron estás advertencias:

Erro HTTP GET fis.abr) Error connecting with SSL. error:1407742E:SSL routines:SSL23_GET_SERVER HELLO:t1svl alert protocol version

Y por último está:
Console ainda nao obteve os comandos de INJECT JS

Y bueno básicamente cuando intento usar la demo me salen nuevamente esas advertencias y no consigo iniciarlas, alguna idea de cómo solucionar?
Responder Con Cita
  #5  
Antiguo 14-07-2022
lucho6007 lucho6007 is offline
Miembro
 
Registrado: ene 2009
Ubicación: Junín, pcia de BsAs, Argentina
Posts: 82
Poder: 16
lucho6007 Va por buen camino
Hola!
Ese proyecto está basado en TInject (https://github.com/mikelustosa/Projeto-TInject), quizá buscando en ese proyecto lo hagas funcionar.


Saludos
Responder Con Cita
  #6  
Antiguo 20-07-2023
Natasha78 Natasha78 is offline
Registrado
 
Registrado: jul 2023
Posts: 1
Poder: 0
Natasha78 Va por buen camino
Cita:
Empezado por azdin Ver Mensaje
Hola muchas gracias por tu respuesta, estuve revisando y me parece un proyecto bastante interesante.
Instale los componentes y cuando fui a ejecutar la Demo me salieron estás advertencias:

Erro HTTP GET fis.abr) Error connecting with SSL. error:1407742E:SSL routines:SSL23_GET_SERVER HELLO:t1svl alert protocol version

Y por último está:
Console ainda nao obteve os comandos de INJECT JS

Y bueno básicamente cuando intento usar la demo me salen nuevamente esas advertencias y no consigo iniciarlas, alguna idea de cómo solucionar?
Las dificultades que está viendo parecen estar relacionadas con problemas del protocolo SSL y la incapacidad de conectarse con éxito al servidor. El error "SSL23_GET_SERVER_HELLO" indica un problema con la negociación del protocolo de enlace SSL/TLS. Esto puede deberse al uso de una versión de SSL/TLS obsoleta que no es compatible con la configuración del servidor. Para remediar esto, asegúrese de estar utilizando la versión más reciente de SSL/TLS que admita el servidor. Compruebe si hay alguna configuración de seguridad relacionada con la inyección de Javascript que pueda estar impidiendo que se ejecute la demostración. Considere ponerse en contacto con el equipo de soporte del sitio web para obtener más ayuda.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Lograr efecto del ToolBar de whatsApp con Firemonkey juank1971 FireMonkey 2 30-06-2021 16:11:43
whatsapp y Delphi 7 Carmelo Cash OOP 2 31-10-2018 22:16:02
Ventana estilo WhatsApp jars Varios 4 13-10-2014 20:34:42
Hacer un whatsapp en delphi JULIPO Internet 11 14-08-2013 09:09:26
Enviar mensajes Whatsapp por c++ builder o delphi vivamotos C++ Builder 8 10-10-2011 22:03:20


La franja horaria es GMT +2. Ahora son las 00:56:02.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi