Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Clicar em botão na web - nao funciona [RESOLVIDO]

A Web está aí, não há como negar. Ela é onipresente em praticamente toda operação eletrônica realizada nos dias de hoje. Como não podia ser diferente, o Excel, ferramenta máxima para analistas e profissionais das mais diversas áreas do mercado precisa estar alinhado com esta necesssidade. E ele está! Neste forum, o debate é focado em expor dúvidas, sugestões, modelos de código e exemplos de uso do Excel na Integração com tecnologias Web.
Bobadilha
Acabou de chegar
Acabou de chegar
Mensagens: 9
Registrado em: Sex Abr 15, 2016 7:58 pm

Clicar em botão na web - nao funciona [RESOLVIDO]

Mensagem por Bobadilha »

Srs,

Meu objetivo é entrar neste site (http://cvmweb.cvm.gov.br/SWB/Sistemas/S ... oConsult=c), consultar o nome de uma empresa, clicar em consultar e depois clicar na linha que contenha 'concedido'.

Consigo fazer a primeira parte, mas nao a segunda, de clicar no botão. Podem me ajudar? Já tentei com .click tambem e nada. Simplesmente não responde.



Public Sub ConectaWeb()
On Error Resume Next
Dim endereço As String
Dim mostra As Boolean

'entra no site
Dim i, n, x As Integer
endereço = "http://cvmweb.cvm.gov.br/SWB/Sistemas/S ... oConsult=c"
Set ie = CreateObject("InternetExplorer.Application")
ie.navigate (endereço)



While ie.ReadyState <> 4
Wend

'seleciona o nome da empresa
ie.Visible = True
ie.document.all("txtCNPJNome").innerText = "EZ TEC"
While ie.ReadyState <> 4
Wend

ie.document.forms.Item("form1").submit

While ie.ReadyState <> 4
Wend
Application.Wait Now() + TimeValue("00:00:10")
'IDENTIFICA QUAL LINHA CONTEM 'CONCEDIDO'

sit = ie.document.all("dlCiasCdCVM__ctl1_Linkbutton9").innerText


While ie.ReadyState <> 4

Wend
j = 9
i = 2
a = Left(sit, 9)
While Left(sit, 9) <> "Concedido"


If j = 9 Then
j = 12
Else
j = 12
End If

i = i + 1

sit = ie.document.all("dlCiasCdCVM__ctl" & i & "_Linkbutton" & j & "").innerText

Wend

' CLICAR
ie.document.getElementById("dlCiasCdCVM$_ctl" & i & "_Linkbutton" & j & "").submit

While ie.ReadyState <> 4

Wend





End Sub
Editado pela última vez por Bobadilha em Seg Mai 09, 2016 10:17 am, em um total de 1 vez.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Clicar em botão na web - nao funciona

Mensagem por Mikel Silveira Fraga »

Bobadilha, bom dia e seja bem vindo ao fórum.

Para obter um melhor resultado no acesso a esta página, fiz algumas alterações na estrutura do código, reduzindo bastante as linhas de comando. Segue abaixo:

Código: Selecionar todos

Option Explicit

Const endereço As String = "http://cvmweb.cvm.gov.br/" & _
                "SWB/Sistemas/SCW/CPublica/CiaAb/FormBuscaCiaAb.aspx?TipoConsult=c"

Public Sub ConectaWeb()

On Error Resume Next

Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")
'Modifiquei acima.

'entra no site
ie.navigate (endereço)

While ie.ReadyState <> 4
Wend

'seleciona o nome da empresa
ie.Visible = True
ie.document.all("txtCNPJNome").innerText = "EZ TEC"
While ie.ReadyState <> 4
Wend

ie.document.forms.Item("form1").submit

While ie.ReadyState <> 4
Wend
Application.Wait Now() + TimeValue("00:00:10")

'Modifiquei daqui pra baixo.
'IDENTIFICA QUAL LINHA CONTEM 'CONCEDIDO'
Dim elemUnique, elemCollection As Object
Set elemCollection = ie.document.getElementsByTagName("a")
For Each elemUnique In elemCollection
    MsgBox elemUnique.innerText
    If elemUnique.innerText Like "*Concedido*" Then
        elemUnique.Click
        Exit For
    End If
Next elemUnique

End Sub
Dessa forma, conseguira acionar o primeiro resultado existente com a Situação Registro como Concedido.

Teste e nos retorne.

Forte abraço.


Bobadilha
Acabou de chegar
Acabou de chegar
Mensagens: 9
Registrado em: Sex Abr 15, 2016 7:58 pm

Re: Clicar em botão na web - nao funciona

Mensagem por Bobadilha »

Ótimo, muito obrigado! Funcionou perfeitamente.

Agora, sem querer abusar, tenho uma outra duvida:

Eu preciso fazer o download do ultimo arquivo disponibilizado da pagina (no link a seguir).Gostaria de salvar o arquivo em uma pasta especifica no sistema.

http://siteempresas.bovespa.com.br/cons ... QtLinks=10

(click em Valores Mobiliários negociados e detidos (art. 11 da Instr. CVM nº 358))


Tentei adicionando o seguinte codigo:


''Seleciona o relatorio CVM 358
Set elemCollection = ie.document.getElementsByTagName("a")


For Each elemUnique In elemCollection
' MsgBox elemUnique.innerText
If elemUnique.innerText Like "*358*" Then
elemUnique.Click
Exit For
End If
Next elemUnique

Application.Wait Now() + TimeValue("00:00:10")
'' Baixa o ultimo arquivo disponivel
Set elemCollection = ie.document.getElementsByTagName("a")
For Each elemUnique In elemCollection
' MsgBox elemUnique.innerText
If elemUnique.innerText Like "*Download*" Then
elemUnique.Click

Exit For
End If
Next elemUnique



O problema que não consigo baixar pois o IE mostra aquela tela perguntando ao usuario 'Abrir','Salvar Como' e 'Cancelar'. E tambem assim estou salvando em Downloads...

Tem alguma alternativa?


Abraços e muito obrigado ! Foi de muita ajuda já !


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Clicar em botão na web - nao funciona

Mensagem por Mikel Silveira Fraga »

Bobadilha, boa tarde.

Em relação ao download do arquivo, seria interessante adaptar o código desse artigo do Blog do Tomás:
- VBA – FAZENDO O DOWNLOAD DE UM ARQUIVO

Adaptando esse código, você já conseguirá resolver este problema.

Tente e nos retorne se tiver dificuldades.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Bobadilha
Acabou de chegar
Acabou de chegar
Mensagens: 9
Registrado em: Sex Abr 15, 2016 7:58 pm

Re: Clicar em botão na web - nao funciona

Mensagem por Bobadilha »

Opa


Ja tinha visto este codigo antes mas nao consegui adaptar. Tentei fazer o seguinte:




Public Sub ConectaWeb()

On Error Resume Next

Dim j As Variant

Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")
'Modifiquei acima.

'entra no site
ie.navigate (endereço)

While ie.ReadyState <> 4
Wend

'seleciona o nome da empresa
ie.Visible = True
ie.document.all("txtCNPJNome").innerText = "EZ TEC"
While ie.ReadyState <> 4
Wend

ie.document.forms.Item("form1").submit

While ie.ReadyState <> 4
Wend
Application.Wait Now() + TimeValue("00:00:10")

'Modifiquei daqui pra baixo.
'IDENTIFICA QUAL LINHA CONTEM 'CONCEDIDO'
Dim elemUnique, elemCollection As Object
Set elemCollection = ie.document.getElementsByTagName("a")
For Each elemUnique In elemCollection
' MsgBox elemUnique.innerText
If elemUnique.innerText Like "*Concedido*" Then
elemUnique.Click
Exit For
End If
Next elemUnique

Application.Wait Now() + TimeValue("00:00:10")


Set elemCollection = ie.document.getElementsByTagName("a")


For Each elemUnique In elemCollection
' MsgBox elemUnique.innerText
If elemUnique.innerText Like "*358*" Then
elemUnique.Click
Exit For
End If
Next elemUnique

Application.Wait Now() + TimeValue("00:00:10")

Set elemCollection = ie.document.getElementsByTagName("a")
For Each elemUnique In elemCollection
' MsgBox elemUnique.innerText
If elemUnique.innerText Like "*Download*" Then
elemUnique.Click


' j = elemUnique


On Error GoTo Err
Dim Auxiliar As Long
Dim URL As String, CaminhoLocal As String
URL = elemUnique
CaminhoLocal = "C:\Users\abobadilha\Downloads"
Auxiliar = URLDownloadToFile(0, URL, CaminhoLocal, 0, 0)
MsgBox "Download efetuado com sucesso!"
Exit Sub
Err:
MsgBox "Erro no download do arquivo"





Exit For
End If
Next elemUnique



Eu recebo a mensagem de Download efetuado com sucesso, mas o arquivo nao se encontra na pasta que indiquei.



Sabe o que pode ser?

abs,


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Clicar em botão na web - nao funciona

Mensagem por Mikel Silveira Fraga »

Bobadilha, bom dia.

Bem, pelo que pude ver no seu código, acredito que o erro esteja na linha de comando abaixo:

Código: Selecionar todos

URL = elemUnique
Como a variável URL é uma String, precisa ser passado um texto para ela, e do jeito que foi feito, isso não esta ocorrendo.
Tente alterar esse comando, da seguinte forma:

Código: Selecionar todos

URL = elemUnique.Src
Essa forma, você estará passando para a variável URL, o endereço do elemento elemUnique.

Teste e nos retorne.

Abraços e excelente semana.


Bobadilha
Acabou de chegar
Acabou de chegar
Mensagens: 9
Registrado em: Sex Abr 15, 2016 7:58 pm

Re: Clicar em botão na web - nao funciona

Mensagem por Bobadilha »

Obrigado pela respostas!


estou recebendo o seguinte erro: Run-time error 438, Object doenst support this property or method

Parece que meu VBA nao reconhece o comando .Scr


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Clicar em botão na web - nao funciona

Mensagem por Mikel Silveira Fraga »

Bobadilha, bom dia.

Cara, entrei no site que você passou, para analisar o que poderia estar ocorrendo de errado. Nessa situação, esta sendo utilizado uma função em JavaScript, que busca o arquivo, através de uma página desenvolvida em Asp.

Em resumo, extremamente complexo para se fazer utilizando o IE. O que posso lhe aconselhar, é que busque nessa mesma seção, os tópicos que falam sobre o Selenium VBA.

Por que o Selenium VBA? Através dele, é possível manipular outros navegadores com recursos mais atuais e estáveis, que possibilitam uma melhor interação com recursos/linguagens como JavaScript e Asp.

Utilizando o Microsoft Internet Control, não vai ser fácil fazer isso, se é que conseguiríamos fazer a rotina de forma correta.

Infelizmente não tenho muito como lhe ajudar neste caso.

Veja qual é sua melhor opção e nos retorne. Fico no aguardo.


Bobadilha
Acabou de chegar
Acabou de chegar
Mensagens: 9
Registrado em: Sex Abr 15, 2016 7:58 pm

Re: Clicar em botão na web - nao funciona

Mensagem por Bobadilha »

Doutor, gastei um tempo no Selenium mas acho que vai valer a pena!


Consegui instalar, executar a rotina e fazer o download mas só falta uma coisa. Gravei a seguinte macro:


Public Sub AAAAAAAAAAAA()
Dim selenium As New SeleniumWrapper.WebDriver
selenium.Start "chrome", "http://cvmweb.cvm.gov.br/"

selenium.Open "/SWB/Sistemas/SCW/CPublica/CiaAb/FormBuscaCiaAb.aspx?TipoConsult=c"
selenium.Type "id=txtCNPJNome", "EZ TEC"
selenium.clickAndWait "id=btnContinuar"
selenium.clickAndWait "id=dlCiasCdCVM__ctl1_Linkbutton9"
selenium.clickAndWait "link=Valores Mobiliários negociados e detidos (art. 11 da Instr. CVM nº 358)"
selenium.clickAndWait "link=Download"
selenium.clickAndWait "xpath=(//a[contains(text(),'Download')])[2]"
selenium.clickAndWait "xpath=(//a[contains(text(),'Download')])[3]"

selenium.stop
End Sub


Só que na pagina que abre antes do download, preciso identificar a data de referencia.


como consigo isso?


abraços e muito obrigado! está me ajudando muito!


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Clicar em botão na web - nao funciona

Mensagem por Mikel Silveira Fraga »

Bobadilha, boa tarde.

Você precisa que essa identificação seja feita antes do download, correto?

Nesse caso, conforme o mês que estiver disponível, vai ter alguma situação em que não seja realizado o download do arquivo.

Exemplo: hoje estamos no dia 05/05/2016 e ainda não esta disponível o documento referente ao período de Abril/2016. Nesse caso, deve ser feito o download do documento de Mar/2016 ou não? Que tipo de relação você tem, para utilizar como referência nesse momento, definindo se o download desse documento, que é o último disponível, deve ser realizado ou não?

Em relação a reconhecer o período e fazer o download, pode ser acrescentado o bloco de código abaixo:

Código: Selecionar todos

Public Sub AAAAAAAAAAAA()
Dim selenium As New SeleniumWrapper.WebDriver
selenium.Start "chrome", "http://cvmweb.cvm.gov.br/"

selenium.Open "/SWB/Sistemas/SCW/CPublica/CiaAb/FormBuscaCiaAb.aspx?TipoConsult=c"
selenium.Type "id=txtCNPJNome", "EZ TEC"
selenium.clickAndWait "id=btnContinuar"
selenium.clickAndWait "id=dlCiasCdCVM__ctl1_Linkbutton9"
selenium.clickAndWait "link=Valores Mobiliários negociados e detidos (art. 11 da Instr. CVM nº 358)"
'selenium.clickAndWait "link=Download"
'selenium.clickAndWait "xpath=(//a[contains(text(),'Download')])[2]"
'selenium.clickAndWait "xpath=(//a[contains(text(),'Download')])[3]"

Dim tbDados As SeleniumWrapper.WebElementCollection
Dim iCell, iTotal As Integer
Set tbDados = selenium.findElementsByXPath("//td")
iTotal = tbDados.Count - 1
For iCell = 0 To iTotal
    If tbDados.Item(iCell).Text = "Data Ref." Then
        tbDados.Item(iCell - 3).findElementByTagName("a").Click
    End If
Next iCell

selenium.stop
End Sub
Veja se isso ajuda e nos retorne qual é o critério utilizado para decidir se esse download será ou não baixado nesse momento.

Fico no aguardo.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder