Estou enfrentando problemas ao adaptar um código desta página para o que preciso; a idéia é um crawler que informe no site do Banco Central uma Data Incial (Coluna"A" da planilha), Data Final (Coluna"B" da planilha), submeta ao site, copie a resposte e cola na Coluna "C" da planilha; porém a macro parece não encontrar a referência "Data Inicial" na página do Banco Central; ela pára em "IE.Document.all("Data Inicial").innertext = lDataInicial"
Alguma consegue?
'Inclui referência ao Microsoft Internet Controls Sub lReferenciaIE() Dim ObRef On Error Resume Next
ThisWorkbook.VBProject.References.AddFromGuid "{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}", 1, 1 End Sub
Sub lsPesquisarCEPFaixa() 'Inclui a referência se não houver lReferenciaIE
Dim IE As InternetExplorer Dim lDataInicial As String Dim lDataFinal As String Dim lUltimaLinhaAtiva As Long Dim lContador As Long
'Identifica a última célula ativa da lista lUltimaLinhaAtiva = Worksheets("Plan1").Cells(Worksheets("Plan1").Rows.Count, 1).End(xlUp).Row
'Cria um objeto Internet Explorer Set IE = New InternetExplorer
'Torna o objeto visível IE.Visible = True
'Faz um loop por todas as linhas da planilha For lContador = 2 To lUltimaLinhaAtiva 'Navega ao site dos correios IE.Navigate "https://www.bcb.gov.br/?SELICDIARIOS"
'Identifica se a página já foi totalmente carregada While IE.ReadyState <> READYSTATE_COMPLETE Wend
'Como a página possui JavaScript que cria os objetos que são preenchidos após a carga completa, é necessário 'aguardar um tempo, coloquei 3 segundos, alterar conforme a necessidade. 'Caso não tenha javascript na criação dos objetos da página comentar esta parte do código, pois será bem 'mais rápida a execução. sng = Timer Do While sng + 1 > Timer Loop
'Carrega os dados de cidade e UF que serão preenchidos na página lDataFinal = Range("B" & lContador).Value lDataInicial = Range("A" & lContador).Value
'Carrega os dados de cidade e UF na página e submente os dados do formulário IE.Document.all("Data Inicial").innertext = lDataInicial IE.Document.all("Data Final").Value = lDataFinal IE.Document.forms("Geral").submit
'Identifica se a página já foi totalmente carregada While IE.ReadyState <> READYSTATE_COMPLETE Wend
'Como a página possui JavaScript que cria os objetos que são preenchidos após a carga completa, é necessário 'aguardar um tempo, coloquei 3 segundos, alterar conforme a necessidade. 'Caso não tenha javascript na criação dos objetos da página comentar esta parte do código, pois será bem 'mais rápida a execução. sng = Timer Do While sng + 1 > Timer Loop
'Faz um loop pelos objetos do tipo table na página e procura pelo campo Faixa(s) de CEP: preenchido. 'Em seguida busca pela segunda coluna da linha de faixa de CEP e armazena esta informação diretamente na coluna C da linha 'da planilha For Each i In IE.Document.body.getElementsByTagName("table") If InStr(i.innertext, "Taxa (%a.a.)") > 0 Then For Each l In i.getElementsByTagName("tr") If InStr(l.innertext, lDataInicial) Then Range("C" & lContador).Value = l.getElementsByTagName("td")(1).innertext End If Next l End If Next i Next lContador
Pergunta
hpedrollo
Prezados, boa tarde;
Estou enfrentando problemas ao adaptar um código desta página para o que preciso; a idéia é um crawler que informe no site do Banco Central uma Data Incial (Coluna"A" da planilha), Data Final (Coluna"B" da planilha), submeta ao site, copie a resposte e cola na Coluna "C" da planilha; porém a macro parece não encontrar a referência "Data Inicial" na página do Banco Central; ela pára em "IE.Document.all("Data Inicial").innertext = lDataInicial"
Alguma consegue?
'Inclui referência ao Microsoft Internet Controls
Sub lReferenciaIE()
Dim ObRef
On Error Resume Next
ThisWorkbook.VBProject.References.AddFromGuid "{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}", 1, 1
End Sub
Sub lsPesquisarCEPFaixa()
'Inclui a referência se não houver
lReferenciaIE
Dim IE As InternetExplorer
Dim lDataInicial As String
Dim lDataFinal As String
Dim lUltimaLinhaAtiva As Long
Dim lContador As Long
'Identifica a última célula ativa da lista
lUltimaLinhaAtiva = Worksheets("Plan1").Cells(Worksheets("Plan1").Rows.Count, 1).End(xlUp).Row
'Cria um objeto Internet Explorer
Set IE = New InternetExplorer
'Torna o objeto visível
IE.Visible = True
'Faz um loop por todas as linhas da planilha
For lContador = 2 To lUltimaLinhaAtiva
'Navega ao site dos correios
IE.Navigate "https://www.bcb.gov.br/?SELICDIARIOS"
'Identifica se a página já foi totalmente carregada
While IE.ReadyState <> READYSTATE_COMPLETE
Wend
'Como a página possui JavaScript que cria os objetos que são preenchidos após a carga completa, é necessário
'aguardar um tempo, coloquei 3 segundos, alterar conforme a necessidade.
'Caso não tenha javascript na criação dos objetos da página comentar esta parte do código, pois será bem
'mais rápida a execução.
sng = Timer
Do While sng + 1 > Timer
Loop
'Carrega os dados de cidade e UF que serão preenchidos na página
lDataFinal = Range("B" & lContador).Value
lDataInicial = Range("A" & lContador).Value
'Carrega os dados de cidade e UF na página e submente os dados do formulário
IE.Document.all("Data Inicial").innertext = lDataInicial
IE.Document.all("Data Final").Value = lDataFinal
IE.Document.forms("Geral").submit
'Identifica se a página já foi totalmente carregada
While IE.ReadyState <> READYSTATE_COMPLETE
Wend
'Como a página possui JavaScript que cria os objetos que são preenchidos após a carga completa, é necessário
'aguardar um tempo, coloquei 3 segundos, alterar conforme a necessidade.
'Caso não tenha javascript na criação dos objetos da página comentar esta parte do código, pois será bem
'mais rápida a execução.
sng = Timer
Do While sng + 1 > Timer
Loop
'Faz um loop pelos objetos do tipo table na página e procura pelo campo Faixa(s) de CEP: preenchido.
'Em seguida busca pela segunda coluna da linha de faixa de CEP e armazena esta informação diretamente na coluna C da linha
'da planilha
For Each i In IE.Document.body.getElementsByTagName("table")
If InStr(i.innertext, "Taxa (%a.a.)") > 0 Then
For Each l In i.getElementsByTagName("tr")
If InStr(l.innertext, lDataInicial) Then
Range("C" & lContador).Value = l.getElementsByTagName("td")(1).innertext
End If
Next l
End If
Next i
Next lContador
MsgBox "Concluído!"
End Sub
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.