Excel-VBA Как получить доступ к contentDocumment с помощью WebBrowser - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь получить доступ к объекту документа фрейма с помощью JS, используя WebBrowser. Код ниже работает отлично, но мне нужно использовать вместо него WebBrowser. Это ошибка, которую я получил:

Ошибка времени выполнения '438'

Объект не поддерживает это свойство или метод

Любое руководство, пожалуйста?

Sub GrabWorkerId1()

    Dim objIE As InternetExplorerMedium
    Set objIE = New InternetExplorerMedium

    objIE.Visible = True
    objIE.Navigate "my url"

    Do While objIE.Busy = True Or objIE.ReadyState <> 4: DoEvents: Loop

    Open "c:\temp\GrabWorkerId2.log" For Output As #3

    Write #3, objIE.Document.getElementsbyTagName("iframe")(1).contentDocument.getElementsbyTagName("select")(0).innerhtml

    Close 3

    Set objIE = Nothing

End Sub

1 Ответ

0 голосов
/ 23 марта 2020

Объект не поддерживает это свойство или метод

Возможно, проблема связана с методом Close и связанным методом для доступа к элементам html.

Сначала попробуйте использовать инструменты разработчика F12, чтобы проверить, содержит ли веб-сайт тег iframe и элемент select, и проверьте учетную запись. Согласно вашему коду, страница должна содержать как минимум два тега iframe, а страница содержимого iframe будет содержать как минимум один элемент select, проверьте его. Кроме того, вы можете добавить отладчик из сценария VBA и проверить внутреннее значение html, убедиться, что вы можете получить это значение.

Во-вторых, о методе Close , попробуйте измените код, как показано ниже:

Close #3

Кроме того, пожалуйста, проверьте следующий код, я проверил его на своей стороне, он работает хорошо (веб-сайт содержит один тег iframe, а страница содержимого iframe содержит только один выберите элемент):

Sub GrabWorkerId1()

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

    objIE.Visible = True
    objIE.Navigate "<website url>"

    While objIE.ReadyState <> 4
            DoEvents
    Wend

    Open "d:\temp\test.log" For Output As #3

    Write #3, objIE.Document.getElementsbyTagName("iframe")(0).contentDocument.getElementsbyTagName("select")(0).innerhtml

    Close #3

    Set objIE = Nothing   
End Sub
...