Página 1 de 1

Selenium

Enviado: 07 Out 2022 17:15
por maxtai
Alguém aqui já fez integração com o Selenium?

Pelo que estou vendo podemos comanda um navegador de forma automatizada. Podemos realizar inúmeras tarefas de forma automática.

o site do projeto é:
https://www.selenium.dev

Se alguém puder passar alguma dica para usar no Harbour agradeço muito.

Um forte abraço a todos,
MaxTai

Selenium

Enviado: 07 Out 2022 20:55
por Itamar M. Lins Jr.
Olá!
podemos comanda um navegador de forma automatizada.
Tem vídeo ?

Saudações,
Itamar M. Lins Jr.

Selenium

Enviado: 11 Out 2022 11:26
por carlaoonline
Bom dia!
maxtai escreveu:passar alguma dica para usar no Harbour
Tchê, acho que para Harbour puro é chance zero, porém para C++ ou até C, talvez possa integrar, acho que esse seria o caminho a procurar, ou então criar um script em Python que seja chamado pelo executável criado em Harbour.

No link abaixo tem um projeto em C++ meio parado, talvez procurando encontre algum em C que seja possível compilar junto com o Harbour.
https://github.com/durdyev/webdriverxx

Código: Selecionar todos

#include <webdriverxx/webdriverxx.h>
using namespace webdriverxx;

int main() {
    WebDriver firefox = Start(Firefox());
    firefox
        .Navigate("http://google.com")
        .FindElement(ByCss("input[name=q]"))
        .SendKeys("Hello, world!")
        .Submit();
    return 0;    
}

Selenium

Enviado: 11 Out 2022 12:57
por JoséQuintas
Tinha isso com o internet explorer, mas ele foi desativado.
Tem até exemplo na GTWVG.
Talvez o webview.

Selenium

Enviado: 11 Out 2022 12:58
por JoséQuintas

Selenium

Enviado: 01 Abr 2023 10:47
por rochinha
Amiguinhos,

Deixando um pequeno trecho para adaptação e testes para quem passar procurando alguma dica ou solução.

Código: Selecionar todos

...
   quem := "Rochinha"
   cPara := "14998776655"
   cCumprimento := "OLa" + iif(!empty(quem),", "+alltrim(quem), "" )
   cmsg  := "Um Teste de Envio de Mensagem de Texto pelo whatsapp. "+chr13+chr(10)+"Neste caso é necessário abrir o browser, "+chr13+chr(10)+"entrar no site web.whatsapp.com, "+chr13+chr(10)+"ler o QR-Code com celular de envio e acionar a rotina pelo sistema."+chr13+chr(10)+chr13+chr(10)+"Ignore momentaneamente estas mensagem pois estou testando o procedimento."

   cMsg  := strTran( cMsg, chr13+chr(10), "+{ENTER}" )
   cPara := CharRem( "*()/-.#[]:, ", cPara )
   oShell:= TOleAuto():New( "WScript.Shell" )
   oShell:run( "https://api.whatsapp.com/send?phone=" + cPara )
   syswait(nWhatSleep); oShell:SendKeys("~")
   syswait(nWhatSleep); oShell:SendKeys(cCumprimento)
   syswait(nWhatSleep); oShell:SendKeys("~")
   syswait(nWhatSleep); oShell:SendKeys(cMsg)
   if !empty(cBmp); syswait(2); oShell:sendkeys("^(v)"); endif
   syswait(nWhatSleep); oShell:SendKeys("~")
   syswait(nWhatSleep)
   oShell:SendKeys("%{F4}")
Use no lugar de TOleAuto():New a automação winole de sua preferencia.

Selenium

Enviado: 20 Jan 2024 11:17
por maxtai
Caro amigo rochinha,

Da forma que o amigo passou acima, funciona com a janela em segundo plano? Eu só consegui fazer funcionar, com ela em primeiro plano, se minimizar ela, a janela que estiver aberta é que recebeu os comandos.

Um grande abraço,
Max Thai
www.maxxsoftware.com.br

Selenium

Enviado: 20 Jan 2024 13:42
por rochinha
Amiguinhos,

maxtai
Tente:

Código: Selecionar todos

...
   quem := "Rochinha"
   cPara := "14998776655"
   cCumprimento := "OLa" + iif(!empty(quem),", "+alltrim(quem), "" )
   cmsg  := "Um Teste de Envio de Mensagem de Texto pelo whatsapp. "+chr13+chr(10)+"Neste caso é necessário abrir o browser, "+chr13+chr(10)+"entrar no site web.whatsapp.com "
   cmsg  :=  cmsg  + chr13+chr(10)+"ler o QR-Code com celular de envio e acionar a rotina pelo sistema."+chr13+chr(10)+chr13+chr(10)+"Ignore momentaneamente estas mensagem pois estou testando o procedimento."

   // Verifica se Whatsapp esta ativo
   lWhatsPresent := .F.
   hWndWhats := FindWindow(,"WhatsApp")
   if IsNil( hWndWhats )
      lWhatsPresent := .F.
   else
      if hWndWhats == 0
         lWhatsPresent := .F.
      else
         lWhatsPresent := .T.
         BringWindowToTop( hWndWhats )
         SysWait(nWhatSleep)
         SendMessage( hWndWhats, WM_SETFOCUS, 0, 0 )
         SysWait(nWhatSleep)
      endif
   endif
   if !lWhatsPresent
      WinExec( "chrome.exe https://web.whatsapp.com/" )
      SysWait(5)
   endif
   // Prepara envio da mensagem
	 
   cMsg  := strTran( cMsg, chr13+chr(10), "+{ENTER}" )
   cPara := CharRem( "*()/-.#[]:, ", cPara )
   oShell:= TOleAuto():New( "WScript.Shell" )
   oShell:run( "https://api.whatsapp.com/send?phone=" + cPara )
   syswait(nWhatSleep); oShell:SendKeys("~")
   syswait(nWhatSleep); oShell:SendKeys(cCumprimento)
   syswait(nWhatSleep); oShell:SendKeys("~")
   syswait(nWhatSleep); oShell:SendKeys(cMsg)
   if !empty(cBmp); syswait(2); oShell:sendkeys("^(v)"); endif
   syswait(nWhatSleep); oShell:SendKeys("~")
   syswait(nWhatSleep)
   oShell:SendKeys("%{F4}")


Selenium

Enviado: 27 Jan 2024 09:39
por maxtai
Prezado amigo Rochinha,

Até funciona, mas ai sistema que vai ficar em primeiro plano não pode ter o foco. A ideia era deixar em segundo plano enviando, desta forma ao clicar no ERP para operar, os comando vão para a janela com o foco ao invés de irem para o whats web.

Abraço e gratidão pela resposta,
Um grande abraço a todos,
Max Thai
www.maxxsoftware.com.br

Selenium

Enviado: 02 Fev 2024 02:31
por rochinha
Amiguinhos,

Veja estes trechos e monte um teste.

Fiz o teste com este conjunto com Windows 10 e WhatsApp desktop instalado. A instalação do WhatsApp Desktop é feita diretamente da loja de aplicativos do Windows.

O curso do código irá capturar o handle do aplicativo WhatsApp, minimizá-lo, maximizálo, dar comandos sendkeys simulando ações do usuário, capturar uma imagem e colada numa mensagem para um de seus contatos.

Modifique as informações de destino no arquivo mensagem.whats.

Arquivo messagem.whats

Código: Selecionar todos

DEQUEM;PARAQUEM;NOME;IMAGEM;MENSAGEM
+5514997797477;+55 14 99779-7477;Rochinha;C:\TEMP\GFDG.BMP;ESTA E UMA MENSAGEM DE TESTE ENTRE EU E EU MESMO
+5514997797477;10Comtracao;Ze das Couves;C:\TEMP\HDS.BMP;ESTA E UMA MENSAGEM DE TESTE ENTRE EU E EU MESMO
Função exemplo de chamada:

Código: Selecionar todos

          // Captura lista whatsapp basica
          IF file( "mensagem.whats" )
             cWHATSTeste := MemoRead( "mensagem.whats" )
             nLines := MlCount(cWHATSTeste,250)
             detnItem := 1
             vMPTotal := 0
             FOR nFor := 2 TO nLines // Linha 1 tem o cabecalho  
                 blinha := MemoLine(cWHATSTeste, 250, nFor)
                 ablinha := StringToArray( blinha, ";" )
                 if !empty( blinha ) .and. len( ablinha )=5
                    if !type( blinha )=="U"
                       Whatsapp( ablinha[1], ablinha[2], ablinha[3], ablinha[4], ablinha[5] )
                    endif
                 endif
                 detnItem := detnItem + 1                   
             NEXT // enddo
             fErase( cWHATSTeste )
          ENDIF
Função principal:

Código: Selecionar todos

Function Whatsapp( cDe, cPara, cQuem, cBmp, cMsg )
   Local clink
   Local oClp
   Local cBmpFile := "WHATSAPP"
   Local cRetVal  := "C:\TEMP\" + cBmpFile + ".BMP"
   // ?procline(),, cDe, cPara, cQuem, cBmp, cMsg 
   OPENCLIPBOARD  := .t.
   EMPTYCLIPBOARD := .t.
   CLOSECLIPBOARD := .t.
   //	DEFINE CLIPBOARD oClip OF oApp // 
   oClip  := TClipBoard():New( 2, oApp )
   oShell := TOleAuto():New( "WScript.Shell" )
   nWhatSleep   := 2
   cDe          := CharRem( "*()/-.%#+[]:, ", cDe )
   cPara        := CharRem( "*()/-.%#[]:, ", cPara )
   cCumprimento := " "+Greetings() + iif(!empty(cQuem),", "+alltrim(cQuem), "" )
   // Captura a tela e salva em arquivo
   if !empty(cBmp)
      // Captura a tela e salva no clipboard
      oClip:Clear()
	  oClip:Open()
      oClip:Empty()
      oClip:SetData( FILoadImg( cBmp ) )
      oClip:End()
   endif
   // Verifica se Whatsapp esta ativo
   lWhatsPresent := .F.
   hWndWhats := FindWindow(0,"WhatsApp") // FindWindow(,"WhatsChrome" ) // WhatsApp - Google Chrome")
   if IsNil( hWndWhats )
      lWhatsPresent := .F.
   else
      if hWndWhats == 0
         lWhatsPresent := .F.
      else
         lWhatsPresent := .T.
         BringWindowToTop( hWndWhats )
         SysWait(2)
         SendMessage( hWndWhats, WM_SETFOCUS, 0, 0 )
         SysWait(2)
      endif
   endif
   SendMessage( hWndWhats, WM_SYSCOMMAND, SC_MINIMIZE, 0 )

   // Prepara envio da mensagem
   if empty( cMsg )
      cMsg  := "Um Teste de Envio de Mensagem de Texto pelo whatsapp. "+CRLF+"Neste caso é necessário abrir o browser, "+CRLF+"entrar no site web.whatsapp.com, "+CRLF+"ler o QR-Code com celular de envio e acionar a rotina pelo sistema."+CRLF+CRLF+"Ignore momentaneamente estas mensagem pois estou testando o procedimento."
   endif
   cMsg  := strTran( cMsg, CRLF, "+{ENTER}" )
   SendMessage( hWndWhats, WM_SYSCOMMAND, SC_MAXIMIZE, 0 )
   if !lWhatsPresent; syswait(2); oShell:run( "https://api.whatsapp.com/send?phone=" + cPara ); endif
   //
   nWhatSleep   := 0.5
   //
   syswait(nWhatSleep); oShell:sendkeys("^(f)")
   syswait(nWhatSleep); oShell:sendkeys( cPara )
   syswait(nWhatSleep); oShell:sendkeys("{DOWN}")
   syswait(nWhatSleep); oShell:sendkeys("{ENTER}")
   syswait(nWhatSleep); oShell:sendkeys( cCumprimento )
   syswait(nWhatSleep); oShell:sendkeys("{ENTER}")
   //
   syswait(nWhatSleep); oShell:sendkeys("^(v)")
   syswait(nWhatSleep); oShell:sendkeys("{ENTER}")
   //
   SendMessage( hWndWhats, WM_SYSCOMMAND, SC_MINIMIZE, 0 )
   Return nil

Function StringToArray( cString, cSeparator ) 
   LOCAL nPos 
   LOCAL aString := {} 
   DEFAULT cSeparator := ";" 
   cString := ALLTRIM( cString ) + cSeparator 
   DO WHILE .T. 
      nPos := AT( cSeparator, cString ) 
      IF nPos = 0 
         EXIT 
      ENDIF 
      AADD( aString, SUBSTR( cString, 1, nPos-1 ) ) 
      cString := SUBSTR( cString, nPos+1 ) 
   ENDDO 
   return ( aString ) 

Function Greetings()
   Local cString := "", nHour, cOldTime 
   nHour := Val( Left( Time(), 2 ) )
   Do Case
      Case nHour < 12
           cString := "Bom dia"
      Case nHour < 18
           cString := "Boa tarde"
      OtherWise
           cString := "Boa noite"
   End Case
   Return cString

Selenium

Enviado: 02 Fev 2024 16:45
por rochinha
Amiguinhos,

Eu havia enxugado a função whatsapp() e o foco da mesma se perdeu. Refiz abaixo:

Código: Selecionar todos

/////////////////////////////////////////////////////////////////////////////
// 
// * Programador: Jose Carlos da Rocha - 01-2021 - Revisao em 01-2024
// * Descricao..: Funcoes de chamadas a WhatsApp
//
/////////////////////////////////////////////////////////////////////////////
Function Whatsapp( cDe, cPara, cQuem, cBmp, cMsg )
   Local clink
   Local oClp
   Local cBmpFile := "WHATSAPP"
   Local cRetVal  := "C:\TEMP\" + cBmpFile + ".BMP"
   // OK ?procline(),, cDe, cPara, cQuem, cBmp, cMsg 
   OPENCLIPBOARD := .t.
   EMPTYCLIPBOARD := .t.
   CLOSECLIPBOARD := .t.
   //	DEFINE CLIPBOARD oClip OF oApp // 
   oClip  := TClipBoard():New( 2, oApp )
   oShell := TOleAuto():New( "WScript.Shell" )
   nWhatSleep   := VerifyINI( "WHATSAPP", "Esperar", 2, cPathDados+"\nfw.ini" )
   cDe          := CharRem( "*()/-.%#+[]:, ", cDe )
   cPara        := CharRem( "*()/-.%#[]:, ", cPara )
   cCumprimento := " "+Greetings() + iif(!empty(cQuem),", "+alltrim(cQuem), "" )
   // Captura a tela e salva em arquivo
   if !empty(cBmp)
      // Captura a tela e salva no clipboard
      oClip:Clear()
	  oClip:Open()
      oClip:Empty()
      oClip:SetData( FILoadImg( cBmp ) )
      oClip:End()
   endif
   // Verifica se Whatsapp esta ativo
   lWhatsPresent := .F.
   hWndWhats := FindWindow(0,"WhatsApp") // FindWindow(,"WhatsChrome" ) // WhatsApp - Google Chrome")
   if IsNil( hWndWhats )
      lWhatsPresent := .F.
   else
      if hWndWhats == 0
         lWhatsPresent := .F.
      else
         lWhatsPresent := .T.
         BringWindowToTop( hWndWhats )
         SysWait(2)
         SendMessage( hWndWhats, WM_SETFOCUS, 0, 0 )
         SysWait(2)
      endif
   endif
   SendMessage( hWndWhats, WM_SYSCOMMAND, SC_MINIMIZE, 0 )
   BringWindowToTop( hWndWhats )

   ShowWindow( FindWindow( 0,cBmpFile ), 9 ) // Forcar o foco
   SetForegroundWindow( FindWindow( 0,cBmpFile ) )

   // Prepara envio da mensagem
   //cmsg  := "Um Teste de Envio de Mensagem de Texto pelo whatsapp. "+CRLF+"Neste caso é necessário abrir o browser, "+CRLF+"entrar no site web.whatsapp.com, "+CRLF+"ler o QR-Code com celular de envio e acionar a rotina pelo sistema."+CRLF+CRLF+"Ignore momentaneamente estas mensagem pois estou testando o procedimento."
   cMsg  := strTran( cMsg, CRLF, "+{ENTER}" )
   SendMessage( hWndWhats, WM_SYSCOMMAND, SC_MAXIMIZE, 0 )
   if !lWhatsPresent; syswait(2); oShell:run( "https://api.whatsapp.com/send?phone=" + cPara ); endif
   //
   syswait(nWhatSleep); oShell:sendkeys("^(f)")
   syswait(nWhatSleep); oShell:sendkeys( cPara )
   syswait(nWhatSleep); oShell:sendkeys("{DOWN}")
   syswait(nWhatSleep); oShell:sendkeys("{ENTER}")
   syswait(nWhatSleep); oShell:sendkeys( cCumprimento )
   syswait(nWhatSleep); oShell:sendkeys("{ENTER}")
   //
   syswait(nWhatSleep); oShell:sendkeys("^(v)")
   syswait(nWhatSleep); oShell:sendkeys("{ENTER}")
   syswait(nWhatSleep); oShell:sendkeys("{ENTER}") // Reforço
   //
   SendMessage( hWndWhats, WM_SYSCOMMAND, SC_MINIMIZE, 0 )
   Return nil