将对象设置为HTML iFrame并访问其文档中的元素

时间:2016-01-11 16:13:29

标签: html vba iframe xmlhttprequest

我试图抓住一个内部网网站(因为内部网我无法分享链接,抱歉),其结构如下:

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="/">
    <begaraninkomstuppgift>
      <xsl:for-each select="Förskoleansökan/Vårdnadshavare">
        <person>
          <xsl:attribute name="personummer">
            <xsl:value-of select="personnummer"/>
          </xsl:attribute>
          <fornamn>
            <xsl:value-of select="Vårdnadshavare/Förnamn" />
          </fornamn>
          <efternamn>
            <xsl:value-of select="Vårdnadshavare/Efternamn" />
          </efternamn>
        </person>
      </xsl:for-each>
    </begaraninkomstuppgift>
  </xsl:template>
</xsl:stylesheet>

所以基本上我正在寻找的信息都在<html> <body> <iframe id="myIframe">#document</iframe> </body> </html> 对象的文档中。在网页中,如果我尝试通过JavaScript以这种方式访问​​它,我能够做到:

iframe

但是,如果我尝试在VBA中执行相同操作,我只能因为对象document.getElementById("myIframe").contentDocument.getElementsByTagName("div") Set test2 = oHtml.getElementById("myIframe")而无法使用。

我定义Nothing的方式如下:

首先,我通过XMLHTTP请求获得了网页的HTML文档:

test2

因此,我已将Dim XMLHTTP As Object, oHtml As Object, pontod As Object On Error Resume Next Set oHtml = New HTMLDocument With CreateObject("WINHTTP.WinHTTPRequest.5.1") .Open "GET", websiteLink, False .send oHtml.body.innerHTML = .responseText End With 声明为对象并尝试将其设置如下:

test2

同样,问题是以上Dim test2 As Object Set test2 = oHtml.getElementById("myIframe") 设置为test2,而如果我尝试在JavaScript(直接在网页上)上执行相同操作则不是这种情况。

这可能取决于我在VBA中获得的HTML文档来自Nothing请求吗?有没有人有任何想法解决这个问题,并得到WINHTTP.WinHTTPRequest.5.1的文件?

P.S。我明白在黑匣子上工作并不好'#34;但不幸的是,这是一个网内;请不要犹豫,询问您是否需要任何其他信息(只要我能提供:) :)

1 个答案:

答案 0 :(得分:2)

你是否等待oHTML中的文档加载和渲染?

您还应验证从WinHTTPRequest获取的源是否与您在javascript中使用的源相同。