Selenium
Moderador: Moderadores
-
maxtai
- Usuário Nível 1

- Mensagens: 9
- Registrado em: 04 Out 2014 16:31
- Localização: Criciúma/SC
- Contato:
Selenium
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
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
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Selenium
Olá!
Saudações,
Itamar M. Lins Jr.
Tem vídeo ?podemos comanda um navegador de forma automatizada.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- carlaoonline
- Usuário Nível 3

- Mensagens: 190
- Registrado em: 24 Ago 2014 22:38
- Localização: Porto Alegre-RS
Selenium
Bom dia!
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
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.maxtai escreveu:passar alguma dica para usar no 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;
}
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Selenium
Tinha isso com o internet explorer, mas ele foi desativado.
Tem até exemplo na GTWVG.
Talvez o webview.
Tem até exemplo na GTWVG.
Talvez o webview.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Selenium
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Selenium
Amiguinhos,
Deixando um pequeno trecho para adaptação e testes para quem passar procurando alguma dica ou solução.
Use no lugar de TOleAuto():New a automação winole de sua preferencia.
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}")
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
-
maxtai
- Usuário Nível 1

- Mensagens: 9
- Registrado em: 04 Out 2014 16:31
- Localização: Criciúma/SC
- Contato:
Selenium
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
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
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Selenium
Amiguinhos,
maxtai
Tente:
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}")
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
-
maxtai
- Usuário Nível 1

- Mensagens: 9
- Registrado em: 04 Out 2014 16:31
- Localização: Criciúma/SC
- Contato:
Selenium
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
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
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Selenium
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
Função exemplo de chamada:
Função principal:
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
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
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
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Selenium
Amiguinhos,
Eu havia enxugado a função whatsapp() e o foco da mesma se perdeu. Refiz abaixo:
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
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.