Jump to content
LuisRojas

ANSWERED Modificar SRC de IFRAME en una WEB desde VBA

Recommended Posts

Hola comunidad, he intentado hacer ésto de muchas formas y aún no consigo obtener lo que necesito, en realidad no sé si se pueda programar con VBA, así que se los comparto por si alguien tuvo algún problema similar y me puede dar una luz

Verán, tengo la página web ipodperu.com (De mi propiedad), en ella tengo un IFRAME que apunta a un vídeo en Youtube

Lo que quería hacer era cargar la web en un objeto WebBrowser en un formulario y con un SpinButton modificar el SRC del IFRAME, no he podido cargar la web porque me salen constantes ventanas de errores (Por el JavaScript al parecer)

Entonces desde un módulo he accedido a la web usando un objeto InternetExplorer, el cual sí reproduce sin problemas el contenido, pero ahora no sé qué código VBA puedo usar para cambiar el SRC del IFRAME por los links que tengo en las celdas A2:A5, el cambio de SRC se debe hacer cada cierto periodo de tiempo

Espero haber sido claro, en resumen lo que necesito es como ingresar al inspeccionador de elementos y modificar código HTML desde VBA, para lo cual no sé si VBA sea suficiente

Info.xlsm

Share this post


Link to post
Share on other sites

Hola

Tal cual lo comentas, sea con un WebBrowser o con el objeto Internet Explorer, pues hasta donde recuerdo, no, no se puede. Si bien el HTML (y otros usados en web) no compila tipo los *.exe,  finalmente es un código fuente y si bien podemos enviarle datos, extraer datos y hasta obtener todo dicho código fuente, manipularlo con VBA a través del navegador no es posible tal cual lo planteas. Si se tiene acceso a los archivos de la web con FTP o accediendo a alguna carpeta que los almacene, pues sí sería posible pero el cambio sería, digamos, permanente (ya que se modificaría propiamente dicho el código fuente), no "temporal" como cuando usamos el "Inspeccionar elemento" o similares.

Saludos

Abraham Valencia
https://abrahamexcel.blogspot.com/
Lima, Perú

Share this post


Link to post
Share on other sites

Gracias por responder Abraham, claro tengo acceso a los archivos porque es uno de mis hosting, pero lo que quería hacer es modificar temporalmente el valor SRC del IFRAME con ID iframe

He usado éste código

 

ie.Document.getElementsbyTagName("iframe")(0).SetAttribute "src", "https://paginaweb.com"

Pero no lo he podido hacer desde el WebBrowser porque al parecer no es compatible con Bootstrap, lo he hecho en el módulo con un objeto Intenet Explorer, lamentablemente Youtube tiene una política de privacidad que no deja reproducir sus vídeos de ésta forma (Lo cual me parece muy bueno, por temas de seguridad)

No sé si se pueda hacer de otra manera, pero al menos con otras web diferentes a YouTube he podido lograrlo

Y cuando se lee el código HTML, lamentablemente no lee el HTML del IFRAME incrustado :(, sé que escapa un poco del tema, pero sabrás una forma de leer el HTML de la web (Incluido el iframe)?, bajo la condición que se debe manejar en el mismo objeto IE y no crear una nueva sesión

SoyUnaVariable = ie.Document.body.innerHTML

Estoy intentando hacerlo con HTMLIFrame

Share this post


Link to post
Share on other sites

Ah, te entendí mejor, estimado. Sobre el WebBrowser, podrías cambiar el registro de Windows para que emule el IE 11 que no da esos errores, pero habría que hacerlo en cada PC y/o hacerlo con VBA también, así que no sé si realmente salga "a cuenta" y yo al menos no lo he probado como para decirte que es un método 100% confiable.

Sobre seguir usando el objeto Internet Explorer, al ya haberte entendido mejor, la cuestión es que para que corran y se vean los videos de Youtube, debes hacerlo como si los incrustaras/insertarás, no como si los compartieras, es decir, debes usar el "embed" de Youtube, algo así:

    Dim IE As Object
    Set IE = CreateObject("InternetExplorer.application")
    IE.Navigate "http://ipodperu.com"
    Do
        DoEvents
    Loop Until IE.ReadyState = 4
    IE.Document.getElementsbyTagName("iframe")(0).SetAttribute "src", "https://www.youtube.com/embed/nQUjScfmLWc"
    IE.Visible = True

Comentas

 Abraham Valencia
https://abrahamexcel.blogspot.com/
Lima, Perú

 

 

Share this post


Link to post
Share on other sites

Genial, no se me había ocurrido usar el embed, ha funcionado para lo de Youtube, se ve bueno

Pero cuando quiero leer el código completo HTML (Incluido el del IFRAME) no puedo, he intentado usar éste código

Dim IE As Object
    Set IE = CreateObject("InternetExplorer.application")
    IE.Navigate "http://ipodperu.com"
    Do
        DoEvents
    Loop Until IE.ReadyState = 4
    IE.Document.getElementsbyTagName("iframe")(0).SetAttribute "src", "https://www.youtube.com/embed/nQUjScfmLWc"
    IE.Visible = True
	
	Debug.Print IE.Document.body.innerHTML
	
	Dim doc As Object, doc1 As Object
    Set doc = IE.Document.frames
    Set doc1 = doc.frames(0)
    
    Debug.Print doc1.Document.body.innerHTML

Pero me figura un mensaje de acceso denegado, tal vez no está permitido leer la data de los iframe, porque la web es mía y no he colocado ninguna restricción

Share this post


Link to post
Share on other sites

Una forma más eficiente para extraer el código de la web, sería la siguiente:

Dim XMLHTTP As Object
Set XMLHTTP = CreateObject("MSXML2.serverXMLHTTP")
XMLHTTP.Open "GET", "http://ipodperu.com", False
XMLHTTP.setRequestHeader "Content-Type", "text/xml"
XMLHTTP.send
Debug.Print XMLHTTP.responseText

¿Te sirve así?

Abraham Valencia
https://abrahamexcel.blogspot.com/
Lima, Perú

Share this post


Link to post
Share on other sites

Sí lo había usado antes, pero en una parte de la respuesta, me devuelve lo siguiente

<div class="embed-responsive embed-responsive-21by9">
       <iframe id="linkcambiar" name="linkcambiar" class="embed-responsive-item" src="https://www.youtube.com/embed/vFxXaZ3G0uU"></iframe>
</div>

El IFRAME contiene el código HTML del vídeo incrustado, teniendo el código puedo validar si el link se incrustó correctamente, lo muestro en la imagen adjunta

2.png

Share this post


Link to post
Share on other sites

No soy un gran experto en HTML y similares pero creo que cuando el código está después de #Document, significa que se trata de un "elemento virtual" que está incrustado/insertado pero que no es en específico de dicha web por lo que es casi "invisible" en términos de código y por ende aparentemente no puede ser extraído. Igual a ver si alguien más tiene información y/o alguna forma de lograrlo.

Abraham Valencia
https://abrahamexcel.blogspot.com/
Lima, Perú

Share this post


Link to post
Share on other sites



×
×
  • Create New...

Important Information

Privacy Policy