Код VBA для копирования данных таблицы с веб-страницы в Excel - PullRequest
2 голосов
/ 17 апреля 2019

Я хочу скопировать данные из таблицы на веб-странице в Excel с использованием кода VBA, но на листе Excel ничего не получилось: (.

Я попытался собрать код VBA из разных источниковВот мой код:

Sub CopyWebData()

Dim IE As Object

On Error Resume Next
Application.DisplayAlerts = False

Set IE = CreateObject("InternetExplorer.Application")
    With IE
        .Visible = True
        .navigate "https://eresearch.fidelity.com/eresearch/evaluate/fundamentals/earnings.jhtml?tab=details&symbols=GOOG"
        Do Until .readyState = 4: DoEvents: Loop
    End With

Dim idoc As MSHTML.HTMLDocument
Dim elem As MSHTML.IHTMLElement

Set idoc = IE.document
Set elem = idoc.getElementsByClassName("layout-outer-table-width")(0).innerText

Sheets("Sheet1").Activate
Range("A1:A1000") = "" ' erase previous data
Range("A1").Select
Range("A1").Value = elem

End Sub

Это защищенная паролем веб-страница, и я вошел в систему, чтобы увидеть, что веб-страница была успешно извлечена кодом VBA. Однако данные в таблицена этой веб-странице не удалось скопировать в Excel - я ничего не видел на листе назначения.

Как вы можете видеть, я использовал код .getElementsByClassName ("layout-external-table-width"), так как я использовал Chrome "Осмотрел функцию «Проверка веб-страницы» и обнаружил, что, когда мышь наводила курсор на операторы:

...<table cellspacing="0" cellpadding="0" border="0" class="layout-outer-table-width"> == $0

 <tbody>...</tbody>

 </table>

часть веб-страницы, покрывающей нужную мне таблицу, была затенена. Затем я закодировал имя класса «layout-external-table-width ". Однако, как я уже сказал, на листе Excel ничего не появляется.

Любая инструкция будет принята с благодарностью!

1 Ответ

0 голосов
/ 17 апреля 2019

Если после таблицы с подробной информацией о доходах вам нужен другой селектор.Я показываю селектор CSS для этой таблицы.Ваш текущий селектор (класс) и индекс 0 совпадают на крошке (навигационном дереве).Этот класс также не подходит для выбора таблицы на странице.

.earningsHistoryTable-Cont table

Я не могу проверить это, но вы также можете захотеть использовать синхронизированный цикл для таблицы

Option Explicit

'VBE > Tools > References:
' Microsoft Internet Controls
Public Sub RetrieveInfo()
    Dim IE As InternetExplorer, hTable As Object, clipboard As Object, t As Date
    Const MAX_WAIT_SEC As Long = 5

    Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    Set IE = New InternetExplorer

    With IE
        .Visible = True
        .Navigate2 "https://eresearch.fidelity.com/eresearch/evaluate/fundamentals/earnings.jhtml?tab=details&symbols=GOOG"

        While .Busy Or .readyState < 4: DoEvents: Wend

        With .document
            .querySelector("#userId").Value = "xyz"
            .querySelector("#password").Value = "123456"
            .querySelector("form").submit
        End With

        While .Busy Or .readyState < 4: DoEvents: Wend

        t = Timer                                'timed loop for details table to be present
        Do
            On Error Resume Next
            Set hTable = IE.document.querySelector(".earningsHistoryTable-Cont table")
            On Error GoTo 0
            If Timer - t > MAX_WAIT_SEC Then Exit Do
        Loop While hTable Is Nothing
        If Not hTable Is Nothing Then  'use clipboard to copy paste
            clipboard.SetText hTable.outerHTML
            clipboard.PutInClipboard
            ThisWorkbook.Worksheets("Sheet1").Range("A1").PasteSpecial
        End If
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...