Página 1 de 2

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

Enviado: Sex Abr 15, 2016 8:03 pm
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

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

Enviado: Seg Abr 18, 2016 9:27 am
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.

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

Enviado: Seg Abr 18, 2016 3:32 pm
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á !

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

Enviado: Seg Abr 18, 2016 4:02 pm
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.

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

Enviado: Ter Mai 03, 2016 8:53 am
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,

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

Enviado: Ter Mai 03, 2016 9:14 am
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.

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

Enviado: Ter Mai 03, 2016 9:27 am
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

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

Enviado: Ter Mai 03, 2016 11:11 am
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.

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

Enviado: Qua Mai 04, 2016 7:42 pm
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!

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

Enviado: Qui Mai 05, 2016 1:23 pm
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.