Получить таблицу из iframe или весь контент из 1-го iframe - PullRequest
0 голосов
/ 11 июля 2020

С помощью кода ниже я пытаюсь получить данные таблицы, которые находятся в iframe с именем displayFrame. Любая помощь приветствуется. Но ошибка ниже при доступе к innertext:

Run-time error 438:
Object doesn't support this property or method

Код:

Sub GetTableFromIframe()

 Dim Ie As New InternetExplorer
 Dim WebURL
 Dim Docx As HTMLDocument
 Dim productDesc As Object

 Ie.Visible = True

    WebURL = "https://example.com"
     Ie.Navigate2 WebURL
     Do Until Ie.readyState = READYSTATE_COMPLETE
     DoEvents
     Loop
     Set Docx = Ie.document

    Do Until Not productDesc Is Nothing
    Set productDesc = Docx.Window.Frames("displayFrame").contentWindow ' gtetting same error here
    Sleep 1000
    Loop

     productDesc = Docx.Window.frames("displayFrame").contentWindow.document.getElementsByClassName("Table")(0).innerText
   
    Debug.Print productDesc

End Sub

Другой макрос получает другую ошибку, добавленную в комментарии:

Sub GetIframeContent()

Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.Application")
Dim productDesc As Object

objIE.Visible = True
objIE.navigate "https://webtac.industrysoftware.automation.siemens"

While objIE.readyState <> 4
        DoEvents
Wend

Open "d:\temp\test.log" For Output As #3
MsgBox objIE.document.getElementsByTagName("iframe")(0).contentDocument.getElementsByTagName("body")(0).innerText ' gets error Object variable or with block variable not set
'Write #3, objIE.document.getElementsByTagName("iframe")(0).contentDocument.getElementsByClassName("under")(0).innerHTML
Write #3, productDesc
Close #3

Set objIE = Nothing
End Sub

Parent страница: enter image description here Iframe page: введите описание изображения здесь

1 Ответ

0 голосов
/ 12 июля 2020

Наконец-то получил. Я искал ifarme вместо frame. Далее я нашел table с classname и извлек данные в лист.

Sub Web_Table_Option_Two() ''' Find table with class name in 1st frame on page and extract table data
Dim HTMLDoc As New HTMLDocument
Dim objTable As Object
Dim lRow As Long
Dim lngTable As Long
Dim lngRow As Long
Dim lngCol As Long
Dim ActRw As Long
Dim objIE As InternetExplorer
Set objIE = New InternetExplorer
'objIE.navigate "https://webtac.industrysoftware.automation.siemens"
objIE.navigate "https://webtac.industrysoftware.automation.siemens.com"

Do Until objIE.readyState = 4 And Not objIE.Busy
DoEvents
Loop


Application.Wait (Now + TimeValue("0:00:03")) 'wait for java script to load
HTMLDoc.body.innerHTML = objIE.document.getElementsByTagName("frame")(0).contentDocument.getElementsByClassName("under")(0).innerHTML
With HTMLDoc.body
Set objTable = .getElementsByTagName("table")
For lngTable = 0 To objTable.Length - 1
    For lngRow = 0 To objTable(lngTable).Rows.Length - 1
        For lngCol = 0 To objTable(lngTable).Rows(lngRow).Cells.Length - 1
        ThisWorkbook.Sheets("Sheet1").Cells(ActRw + lngRow + 1, lngCol + 1) = objTable(lngTable).Rows(lngRow).Cells(lngCol).innerText
        Next lngCol
    Next lngRow
    ActRw = ActRw + objTable(lngTable).Rows.Length + 1
Next lngTable
End With
objIE.Quit

End Sub
...