Saltar al contenido

abrir la pagina por la que estoy navegando


Recommended Posts

publicado

buenas tardes, tengo el siguiente código para navegar por paginas web, pero navega en segundo plano, que debo agregar al código para que se pueda abrir y visualizar la pagina que abre la macro?

Sub testnavegar()
Dim htmlDeRespuesta As Object
Set htmlDeRespuesta = CreateObject("htmlFile")
With CreateObject("msxml2.xmlhttp")
   .Open "Get", "https://www.google.cl/", False
   .send
   htmlDeRespuesta.body.innerHTML = .responseText
End With

On Error Resume Next


Range("d4").Value = htmlDeRespuesta.getElementsByid("gNO89b")(0).innerText

On Error GoTo 0
End Sub

muchas gracias

 

 

publicado

En realidad no tengo la menor idea de como funciona este objeto, pero te puedo hacer una observación:

Observaciones:


Sub testnavegar()
Dim htmlDeRespuesta As Object
Set htmlDeRespuesta = CreateObject("htmlFile")

With CreateObject("msxml2.xmlhttp")
   .Open "Get", "https://www.google.cl/", False
   .send
   htmlDeRespuesta.body.innerHTML = .responseText
   Debug.Print htmlDeRespuesta
End With

Range("d4").Value = htmlDeRespuesta.getElementById("SIvCob").innerText
End Sub

Cuando haces referencia a una etiqueta, puedes hacerlo mediante los siguientes atributos:

getElementById("")

getElementsByClassName("")(n), getElementsByTagName("")(n), getElementsByName("")(n)

 

¿Cuál es la diferencia? 

  1. El ID es único, por ello se escribe Element y no Elements. 
  2. Los demás atributos, pueden repetirse, por ello, en donde puse la letra n, puedes colocar el número de atributo al que haces referencia, por ejemplo, si existen 3 clases llamadas "cal", y quieres hacer referencia a la segunda etiqueta sería así: getElementsByClassName("cal")(1)... si te fijas, dice uno, eso es porque el conteo comienza desde 0...

 

 

publicado

@Galactico

Ese tipo de objeto no abre una instancia del navegador que es lo que tu quieres, deberías utilizar otro objeto.

El que estás utilizando es más seguro y mucho más rápido, accede al servidor dónde está la Web pero no accedes a ella como si estuvieses navegando.

El objeto IE Explorer si abre una instancia del navegador, hay mucho código por ahí pero no te lo recomiendo para extraer datos Web si con el objeto que pones en el ejemplo puedes lograrlo (yo suelo utilizar otro)

Saludos.

publicado
Hace 8 horas, Luis paz dijo:

En realidad no tengo la menor idea de como funciona este objeto, pero te puedo hacer una observación:

Observaciones:


Sub testnavegar()
Dim htmlDeRespuesta As Object
Set htmlDeRespuesta = CreateObject("htmlFile")

With CreateObject("msxml2.xmlhttp")
   .Open "Get", "https://www.google.cl/", False
   .send
   htmlDeRespuesta.body.innerHTML = .responseText
   Debug.Print htmlDeRespuesta
End With

Range("d4").Value = htmlDeRespuesta.getElementById("SIvCob").innerText
End Sub

Cuando haces referencia a una etiqueta, puedes hacerlo mediante los siguientes atributos:

getElementById("")

getElementsByClassName("")(n), getElementsByTagName("")(n), getElementsByName("")(n)

 

¿Cuál es la diferencia? 

  1. El ID es único, por ello se escribe Element y no Elements. 
  2. Los demás atributos, pueden repetirse, por ello, en donde puse la letra n, puedes colocar el número de atributo al que haces referencia, por ejemplo, si existen 3 clases llamadas "cal", y quieres hacer referencia a la segunda etiqueta sería así: getElementsByClassName("cal")(1)... si te fijas, dice uno, eso es porque el conteo comienza desde 0...

 

 

muchas gracias por tu respuesta, me salio duda, que pasa si quiero copiar en una casilla de excel, el nombre del ID? en este caso, para dejar en la celda d4 como texto el SIvCob o el gNO89b? o específicamente necesito, que me traiga a una celda de excel el nombre de la id para usarlo después

 

<table class="MKMTable wantsTable MKMSortable">
<thead>
<tr><tr>
</thead>
<tbody>
<tr>
<td class="centered">
<input type="checkbox" name="a_WantedCards[5e0ba7f39565560cc15d296b]" class="massEditCB">
</td>
<td class="centered">

entonces lo que necesito es que me copie como texto en una casilla de excel el nombre "a_WantedCards[5e0ba7f39565560cc15d296b]" , en este momento estoy tratando de obtener ese dato, pero no tengo resultados, seria posible realizarlo?

 

muchas gracias

 

 

Hace 5 horas, José_Santos dijo:

@Galactico

Ese tipo de objeto no abre una instancia del navegador que es lo que tu quieres, deberías utilizar otro objeto.

El que estás utilizando es más seguro y mucho más rápido, accede al servidor dónde está la Web pero no accedes a ella como si estuvieses navegando.

El objeto IE Explorer si abre una instancia del navegador, hay mucho código por ahí pero no te lo recomiendo para extraer datos Web si con el objeto que pones en el ejemplo puedes lograrlo (yo suelo utilizar otro)

Saludos.

 gracias por su respuesta, que otro objeto utiliza?

 

saludos

publicado

Respondiendo a tu duda:

no es necesario agregarlo a un celda de excel, para eso existen las variables, a las cuales les puedes asignar un varlo y conservarlo durante todo el proceso… Tú proceso lo puedes hacer mediante código sin necesidad de guardar los nombres o valores de los atributos en una celda de excel... Espero explicarme correctamente.

Consulta mediante VBA Excel (Internet Explorer):

Sub IEinternet()

    Direc = "https://www.google.cl/"
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True ' Aquí puede hacer visible el explorador ie internet o no
    objIE.navigate Direc
        
    With objIE
    'Este es para esperar que cargue la página
    While .Busy = True Or .readyState < 4: DoEvents: Wend
    Do Until objIE.readyState = 4: DoEvents: Loop

        objIE.document.getElementsByClassName("gLFyf gsfi")(0).Value = "HOLA"
        objIE.document.getElementsByClassName("gNO89b")(0).Click
        Application.Wait (Now + TimeValue("00:00:02"))
        Range("D4").Value = objIE.document.getElementsByClassName("kno-ecr-pt PZPZlf gsmt")(0).getAttribute("data-ved")
        
    'Cierras el objeto
    objIE.Quit
    Set objIE = Nothing
    End With

End Sub
 

Adjunto el archivo para que puedas hacer tus pruebas e ir aprendiendo. También te aconsejo que investigues en páginas web ya que te ayudará mucho ;)

https://www.dropbox.com/s/qmakay0popvy15y/Ie Internet.xlsm?dl=0

 

publicado

Muchísimas gracias, conseguí  lo que quería a la perfección con el código que nos compartió, una ultima consulta para terminar con el proyecto que estoy realizando

tengo que hacer click en un botón que tiene la siguiente forma, donde el boton se llama Go

<span class="block labeledBlock">

	<span class="lb_Label">&nbsp;</span>
	<br>
	<span class="lb_Content">
		<input type="submit" value="Go">
	</span>
</span>

estoy tratando de clickearlo con el siguiente linea de código

.Document.getElementsByName("lb_Content")(0).hasAttribute("type").hasAttribute("value").Click

pero no he dado con la solución, he probado de varias formas, también e intentado con GetElementsByTagName y GetElementsByName, pero nada aun, agradecería mucho una mano, necesito si o si agregar algun atributo ya que la pagina que estoy viendo tiene varias clases que se llama "lb_Content"

saludos.

publicado

Hola @Galactico

Error:

.Document.getElementsByName("lb_Content")(0). Aquí mencionas el atributo "Name", sin embargo, el código que mencionas, no veo que tenga dicho atributo... Usas Name, cuando:

<span class="lb_Content" name="aquiekja">

Posible siolución:

.Document.getElementsByClassName("lb_Content")(0).getElementsByTagName("input")(0).click

Ojo: .Document.getElementsByClassName("lb_Content")(0) puse (0), ya que estoy haciendo referencia a la primera etiqueta que contenga dicha clase, ya que si hay dos etiquetas con dicha clase y tú quieres hacer referencia a las segunda etiqueta, sería (1)

Repito mi consejo, busca ejemplos en internet, empapate más del tema y podrás conseguir muchas cosas utilizando este objeto.. Saludos ?

publicado
Hace 17 horas, Galactico dijo:

muchas gracias por tu respuesta, me salio duda, que pasa si quiero copiar en una casilla de excel, el nombre del ID? en este caso, para dejar en la celda d4 como texto el SIvCob o el gNO89b? o específicamente necesito, que me traiga a una celda de excel el nombre de la id para usarlo después

 


<table class="MKMTable wantsTable MKMSortable">
<thead>
<tr><tr>
</thead>
<tbody>
<tr>
<td class="centered">
<input type="checkbox" name="a_WantedCards[5e0ba7f39565560cc15d296b]" class="massEditCB">
</td>
<td class="centered">

entonces lo que necesito es que me copie como texto en una casilla de excel el nombre "a_WantedCards[5e0ba7f39565560cc15d296b]" , en este momento estoy tratando de obtener ese dato, pero no tengo resultados, seria posible realizarlo?

 

muchas gracias

 

 

 gracias por su respuesta, que otro objeto utiliza?

 

saludos

En este post puse un ejemplo a una consulta de otro usuario:

Saludos

 

 

 

publicado
Hace 3 horas, Luis paz dijo:

Hola @Galactico

Error:

.Document.getElementsByName("lb_Content")(0). Aquí mencionas el atributo "Name", sin embargo, el código que mencionas, no veo que tenga dicho atributo... Usas Name, cuando:


<span class="lb_Content" name="aquiekja">

Posible siolución:


.Document.getElementsByClassName("lb_Content")(0).getElementsByTagName("input")(0).click

Ojo: .Document.getElementsByClassName("lb_Content")(0) puse (0), ya que estoy haciendo referencia a la primera etiqueta que contenga dicha clase, ya que si hay dos etiquetas con dicha clase y tú quieres hacer referencia a las segunda etiqueta, sería (1)

Repito mi consejo, busca ejemplos en internet, empapate más del tema y podrás conseguir muchas cosas utilizando este objeto.. Saludos ?

Muchas gracias, me ha ayudado mucho, no es posible usar las variables type o value para lograr encontrar el botón? 

 

Hace 1 hora, José_Santos dijo:

En este post puse un ejemplo a una consulta de otro usuario:

Saludos

 

 

 

Gracias, le daré un vistazo

publicado
Hace 20 minutos , Galactico dijo:

Muchas gracias, me ha ayudado mucho, no es posible usar las variables type o value para lograr encontrar el botón? 

Sub Macro()

Dim iEle as Object
Set iEle = objIE.document.getElementsByTagName("div") 'Estableces el nombre de la etiqueta que deseas buscar
For Each oElement In iEle 'Se realiza un recorrido por todas la etiquetas DIV
    If oElement.Value = "KJSDNDD" Then 'Estableces la condición que desees sobre la etiqueta. Puede ser Value, innerText, Title, Class...

     Los que deseas que se ejecute...


    Exit for'El encontrar el resultado deseado, deja de buscar
    End If
Next oElement

End Sub

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      187
    • Comentarios
      97
    • Revisiones
      28

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    1    1

  • Crear macros Excel

  • Mensajes

    • Hola nuevamente. Por eso la importancia de lo que mencionas tú como "ruta relativa". Tal cual comentas, y aún sin llegar a algunos detalles importantes para ayudarte, en realidad tal cual te comenté le día miércoles, pues sí podías hacer como comentabas, era cosa de obtener los Id de Windows (como tú los llamas) y la ruta de OneDrive en casa usuario y eso sí se puede obtener con VBA y luego pasarlo a PQ, pero medio que te cerraste en que "PQ no puede trabajar con rutas relativas", cosa cierta pero siempre hay formas. Si SAP puede o no guardar en OneDrive o SharePoint, pues si está mapeado en la PC ¡claro que se puede! Pero bueno, creo que si te es útil tu propia propuesta ¡avanza con eso!
    • Perdona @Abraham Valencia pero he estado liado estos días. En realidad todo el problema se reduce a estos dos problemas: Problema 1: El script que "fabrica" SAP y que luego "pego" en la macro, no es capaz de  guardar archivos en SharePoint. He estado buscando, y en realidad muchas personas tienen ese problema (no poder guardar un Excel en SAP a través de VBA). Eso muy probablemente sean problemas de permisos, que no puedo cambiar (no soy administrador de nada). Como no puedo solucionarlo así, paso al plan B, que es guardar en Excel que me genera SAP en el ordenador de cada usuario que ejecute la plantilla (y que sí está guardada en SharePoint), para después con PowerQuery llamar a ese Excel (el export). Para ello, pretendo guardar el export, en la ruta relativa "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" donde los \..\..\..\ saltan las rutas personales de cada usuario (tipo C:\users\IDusuario\). Eso lo hace bien, y el archivo se guarda en la ruta de cada usuario que lo usa, pero surge el problema 2 Problema 2: PowerQuery no trabaja con rutas relativas del tipo  "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" necesita que sea del tipo fija "C:\users\IDusuario\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" pero claro, IDusuario es diferente para cada usuario.   Pero escribiendo todo esto, creo que he dado con una posible solución, no grabar el export en una ruta de usuario, sino en una en la raiz de C:, que siempre será igual para todos los usuarios, del tipo C:\Sap\export.xlsx que seria igual en todos los ordenadores. Asi sí podría decirle a PowerQuery que vaya siempre a la ruta C:\Sap\ que existirá en todos los ordenadores. Mañana intentaré hacer pruebas, aunque mi solución ideal seria que se pudiera guardar en el SharePoint. Saludos.
    • Hola La opción brindada por @torquemada es correcta, funciona, pero hay algunos inconvenientes que (desde mi punto de vista) no la convierten en mi primera elección. Los inconvenientes son: Tendrías que ir columna por columna haciendo los reemplazos, claro que no se harían a mano sino que utilizarías la opción reemplazar o la opción texto en columnas, aun asi demorará un poquito y será trabajoso. Cada vez que descargues otro listado, tendrás que volver a realizar los reemplazos. Me parece una mejor propuesta lo siguiente: Descarga los movimientos a un archivo de Excel Desde tu control de pagos (otro archivo) cargas los movimientos del archivo descargado mediante Power Query Power Query hará los reemplazos y reconocerá todo correctamente (sin que tengas que hacer nada especial) Cuando descargues los movimientos un día posterior, solamente tendrás que hacer clic en "Actualizar" y todo funcionará en automático
    • Hola a todos, Efectivamente, me temo que tal como trabajan las funciones =HOY() y/o =AHORA() (volátiles), sólo con macros puedes obtener soluciones. Un recurso pedestre podría ser, cada vez que quieras que se fije un dato, te sitúes en esa celda y pulses F2, F9 e INTRO.  Pero claro, puede ser un inconveniente si hay que hacerlo repetitivamente en muchas ocasiones,.............. en fin, lo comento sólo como posibilidad. Saludos,
    • Hola nuevamente, mi duda sigue siendo la ruta, o rutas, finales que quedan, esas que llamas "relativas"; igual por si acaso pon 3 o 4 de esas, tal cual son y/o se ven en el explorador de cada PC y, de ser posible, en cualquier otro "lado" en que las veas.
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.