Visual Basic para Aplicaciones - getElementsByClassName & getElementsByTagName

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 4
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

getElementsByClassName & getElementsByTagName

Publicado por SANCHEZ CASTELLO, S.L. (14 intervenciones) el 28/01/2019 19:17:46
CodigoWeb

Hola,

Estoy tratando de extraer un dato de una web que tiene el código que he adjuntado. El dato en particular que quiero incorporar a excel esta recogido en esta sección (en la imagen adjunta aparece subrayado y el dato buscado sería "33"):

1
<span class="value--2NhHD">33</span>

Este es el código VBA que hasta el momento estoy desarrollando y del que no se aplicar getElementsByClassName / getElementsByTagName para conseguir el dato que estoy buscando:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Private Sub ExtraerDato()
 
Dim i As Long
Dim ie As Object
Dim objElement As Object
Dim objCollection As Object
 
    'dimension (declare or set aside memory for) our variables
    Dim objIE As InternetExplorer 'special object variable representing the IE browser
    Dim aEle As HTMLLinkElement 'special object variable for an <a> (link) element
    Dim y As Integer 'integer variable we'll use as a counter
    Dim result As String 'string variable that will hold our result link
    Dim Web As String
    Dim objCollection As Object
 
    Web= Sheets("Hoja1").Range("A1")
 
    'initiating a new instance of Internet Explorer and asigning it to objIE
    Set objIE = New InternetExplorer
 
    'make IE browser visible (False would allow IE to run in the background)
    objIE.Visible = True
 
    'navigate IE
    objIE.navigate Web
 
    'wait here a few seconds while the browser is busy 
    Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
 
 
 
     'Begin extraction
      Set objCollection = objIE.document.getElementsByClassName("container")
      Sheets("Hoja1").Range("A2") = objCollection.getElementsByTagName("span")(0).innerText
 
 
End Sub


Gracias de antemano por vuestra ayuda.

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 4
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

getElementsByClassName & getElementsByTagName

Publicado por Jose Sanchez (14 intervenciones) el 05/02/2019 19:20:01
Hola,

He conseguido extraer el dato que buscaba mediante este codigo:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub ExtraerDato()
 
Dim objIE As InternetExplorer 'special object variable representing the IE browser
 
Set objIE = New InternetExplorer
 
objIE.Visible = True
 
objIE.navigate Sheets("Hoja1").Range("B5")
 
 
'Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
 
Set delements = objIE.document.getElementsByTagName("span")
 
Sheets("Hoja1").Range("A1") = delements(1).textContent
 
 
End Sub


El dato que se me me incorpora en la celda A1 no es fijo y cada x tiempo cambia. Ahora lo que me gustaría es actualizar el dato conforme lo actualiza la página web y me salen las siguientes dudas:

1º) Para actualizar el dato me valdría con repetir manualmente cada cierto tiempo el código de arriba y comprobar si ha variado, Pero de esta manera se me va abriendo un explorador cada vez, hay alguna manera de incorporar el dato sin que se me abra un explorador cada vez que ejecuto el codigo?

2º) Hay alguna manera que se ejecute el código en el momento exacto en que cambia el dato en la Web?

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar