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

Grupo de Teaming del ClubDelphi

 
 
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, 11 visitas)
Responder Con Cita
 



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 15:11:43
whatsapp y Delphi 7 Carmelo Cash OOP 2 31-10-2018 21:16:02
Ventana estilo WhatsApp jars Varios 4 13-10-2014 19:34:42
Hacer un whatsapp en delphi JULIPO Internet 11 14-08-2013 08:09:26
Enviar mensajes Whatsapp por c++ builder o delphi vivamotos C++ Builder 8 10-10-2011 21:03:20


La franja horaria es GMT +2. Ahora son las 20:06:17.


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