Página 1 de 1

VBA Selenium, rodar a macro mais vez na mesma insancia do chrome.

Enviado: Qui Mai 05, 2022 3:57 pm
por JoaoVictorWerle
Gostaria de saber se é possivel rodar varias vezes a macro na mesma instancia do chrome? Por exemplo, rodar a primeira vez, fazer o login e durante o dia continuar rodando a macro na mesma instancia, para não ter que fazero login toda vez.
Pois o site que eu estou tentando tirar uma tabela, tem uma validação com código que é externa, então toda vez que for fazer login eu vou ter que colocar o código manualmente. Então se eu deixasse a instancia do chrome aberta, não teria que colocar o código toda vez.

(Sei que o meu código está uma bagunça e primeiro de tudo eu vou ter q validar se o site já está aberto primeiro, mas no momento o meu maior problema é esse kk... Qualquer ajuda será de grande valia.)


Segue o meu codigo:

Public Driver As New Selenium.WebDriver

Public Sub ProjudiPrQuasePronto()

Dim Cnpj As String, Data As String, Tabela As WebElement, Codigo As String, Destino As Range

On Error GoTo 1

'Driver.AddArgument ("--headless")

Workbooks.Open ("C:\Users\Desktop\PLANILHA BANCO - TESTE")
ActiveSheet.Range("D2").Select
Cnpj = Application.ActiveCell

Workbooks.Open ("C:\Users\Desktop\PLANILHA BANCO - TESTE")
ActiveSheet.Range("P2").Select
Data = Application.ActiveCell


Workbooks.Open ("C:\Users\Desktop\PLANILHA BANCO - TESTE")
ActiveSheet.Range("L5").Select
ActiveSheet.Range("L5:P2500").Select
Selection.ClearContents

Set Destino = ActiveSheet.Cells(Rows.Count, "L").End(xlUp).Offset(1, 0)

Driver.Start "chrome"
'driver.Window.Maximize
Driver.Get "https://projudi.tjpr.jus.br/projudi/"


Driver.SwitchToFrame "mainFrame"

Driver.FindElementByXPath("/html/body/div/div[2]/div[1]/div[1]/ul/li[2]").Click
Driver.FindElementByXPath("/html/body/div/div[2]/div/div/div/div/form/div[1]/input").SendKeys "Aqui vai o login"
Driver.FindElementByXPath("/html/body/div/div[2]/div/div/div/div/form/div[2]/input").SendKeys "Aqui vai a senha"
Driver.FindElementByXPath("/html/body/div/div[2]/div/div/div/div/form/div[4]/input[2]").Click

'essa é a parte de interesse,onde eu tenho q inserir o código
Codigo = Application.InputBox("Insira o Código: ")
If Codigo = "False" Or Codigo = "" Then GoTo 2

Driver.FindElementByXPath("/html/body/div/div[2]/div/div/form/div[1]/div[2]/input").SendKeys Codigo
Driver.FindElementByXPath("/html/body/div/div[2]/div/div/form/div[2]/div[2]/input").Click
Essa é a tela que vai depois de efetuar o login, é aqui onde vai o codigo externo.
Essa é a tela que vai depois de efetuar o login, é aqui onde vai o codigo externo.
Captura de Tela (43373).png (134.5 KiB) Exibido 1835 vezes



Driver.FindElementByXPath("/html/body/div[1]/div/nav/ul/li[8]/a").Click
Driver.FindElementByXPath("/html/body/div[1]/div/nav/ul/li[8]/ul/li[1]/a").Click

Driver.SwitchToFrame "userMainFrame"

Driver.FindElementByXPath("/html/body/div[1]/div[2]/form/fieldset/table/tbody/tr[2]/td[2]/input[2]").Click
Driver.FindElementByXPath("/html/body/div[1]/div[2]/form/fieldset/table/tbody/tr[8]/td[2]/input").SendKeys Cnpj
Driver.FindElementByXPath("/html/body/div[1]/div[2]/form/fieldset/table/tbody/tr[9]/td[2]/input[1]").Click
Driver.FindElementByXPath("/html/body/div[1]/div[2]/form/fieldset/table/tbody/tr[11]/td[2]/input").SendKeys Data
Driver.FindElementByXPath("/html/body/div[1]/div[2]/form/table/tbody/tr/td[2]/input").Click

Driver.Wait 1

Set Tabela = Driver.FindElementByXPath("/html/body/div[1]/div[2]/form/table[2]/tbody")

Driver.Wait 1

Application.EnableAnimations = True

Exit Sub

1: msgbox Err.Description

Exit Sub

2: msgbox ("Não foi inserido o Código de acesso, processo finalizado!")

Exit Sub

3: msgbox ("Foi inserido um código invalido ou expirado, processo finalizado!")

Exit Sub

End Sub

Re: VBA Selenium, rodar a macro mais vez na mesma insancia do chrome.

Enviado: Sex Mai 06, 2022 1:35 pm
por webmaster
Possível é e você já está no caminho. Manter a variável driver fora da função é o primeiro passo.

No entanto, o VBA não é muito bom em manter as coisas em memória. Ele segue o ciclo do Excel, mas sem garantias, ou seja, se ficar muito tempo sem "ativar" o VBA, pode ser que a variável driver perca a referência ao navegador.

No seu caso, manteria a rotina de login todas as vezes. No fim das contas, está automatizado e você não precisa se preocupar mais com isso ;)

Re: VBA Selenium, rodar a macro mais vez na mesma insancia do chrome.

Enviado: Sex Mai 06, 2022 5:19 pm
por JoaoVictorWerle
Certo, porem como eu poderia fazer para a macro verificar se o navegador ainda está aberto? Porque se não, toda vez que eu rodar a macro ela vai abrir o navegador do zero!
Pensei no comando "IsElementPresent" para verificar, será que é possivel?

Re: VBA Selenium, rodar a macro mais vez na mesma insancia do chrome.

Enviado: Sex Mai 06, 2022 5:50 pm
por webmaster
Verifique se a variável não está nula ou Nothing. De outra forma, recomendo abrir o navegador de novo.

Tenha em mente que o Selenium é uma suíte de testes. Não é a intenção dele controlar o navegador.