Как вызвать скрипт AngularJS с аргументом для загрузки HTML-элементов - PullRequest
1 голос
/ 12 апреля 2019

Я нахожусь в веб-проекте, но URL содержит AngularJS, с которым я не знаком. У меня проблемы с доступом к HTML-элементам, которые, вероятно, были созданы на основе AngularJS, и в данный момент активна функция «handicapOption».

Интернет, для целей тестирования, я тренируюсь на этом URL

URL-адрес может быть недоступен, когда люди увидят этот вопрос, поэтому здесь есть ссылка, где можно найти доступные расы. https://www.tvg.com/races

А вот соответствующая часть HTML

<div class="group">
  <h2 class="runners-table-title">Race Card</h2>
  <div class="handicapOption" qa-label="handicapOption">
    <h3>Handicapping
      <!----><span ng-if="$root.activeFeatures.tooltipHandicapping" tooltip-placement="bottom" uib-tooltip-template="selectedHandicaping.helpTemplateUrl"><i class="tvg-icon-help"></i></span>
      <!---->
    </h3>
    <ul>
      <!---->
      <li ng-repeat="option in handicapingOptions"><a class="active" href="" ng-class="{'active': selectedHandicaping === option}" qa-label="handicapOptionValue" ng-click="selectHandicapping(option)">Summary</a></li>
      <!---->
      <li ng-repeat="option in handicapingOptions"><a href="" ng-class="{'active': selectedHandicaping === option}" qa-label="handicapOptionValue" ng-click="selectHandicapping(option)">Snapshot</a></li>
      <!---->
      <li ng-repeat="option in handicapingOptions"><a href="" ng-class="{'active': selectedHandicaping === option}" qa-label="handicapOptionValue" ng-click="selectHandicapping(option)">Speed &amp; Class</a></li>
      <!---->
      <li ng-repeat="option in handicapingOptions"><a href="" ng-class="{'active': selectedHandicaping === option}" qa-label="handicapOptionValue" ng-click="selectHandicapping(option)">Pace</a></li>
      <!---->
      <li ng-repeat="option in handicapingOptions"><a href="" ng-class="{'active': selectedHandicaping === option}" qa-label="handicapOptionValue" ng-click="selectHandicapping(option)">Jockey/Trainer Stats</a></li>
      <!---->
    </ul>
  </div>
</div>

В основном, когда я нажимаю Элемент-B (Снимок) -> второй элемент <li>, и Элемент-A (Сводка), и Элемент-B меняют свое имя, как показано ниже

  <li ng-repeat="option in handicapingOptions"><a href="" ng-class="{'active': selectedHandicaping === option}" qa-label="handicapOptionValue" ng-click="selectHandicapping(option)">Summary</a></li>

<li ng-repeat="option in handicapingOptions"><a class="active" href="" ng-class="{'active': selectedHandicaping === option}" qa-label="handicapOptionValue" ng-click="selectHandicapping(option)">Snapshot</a></li>

и затем отображается другая таблица.

Это то, что я пытался смоделировать с помощью VBA. К сожалению, элемент таблицы не обновляется. И я предполагал, что эта функция называется "SelectHandicapping (опция)" Кто-нибудь может научить меня, как? Постскриптум Я понятия не имею, как указать значение параметра аргумента или какие данные есть в параметре аргумента.

Так что я всю эту неделю копался и гуглял по этому поводу и, наконец, решил плюнуть на вопрос. Я пытался вызвать ".Click" и запустить событие "onChange", но безрезультатно. Не удалось загрузить таблицу содержимого снимка с помощью кода

А вот мой код VBA

    Public Sub LoadHorses()
    Dim v As Variant
    Dim ie As InternetExplorer
    Set ie = Core.API_.Explorer
    ie.Navigate oRaceTrack.RaceUrl & "?race=" & RaceNumber
    Do While ie.Busy Or ie.ReadyState <> READYSTATE_COMPLETE
      Application.StatusBar = "Requesting " & Title & " Horse Data"
      DoEvents
    Loop

    Dim oHTMLDoc As HTMLDocument
    Set oHTMLDoc = ie.Document
    Do While Not oHTMLDoc.ReadyState = "complete"
      Application.StatusBar = "Loading " & Title & " data, please wait"
      DoEvents
    Loop

    Dim handicapOption As Object
    Dim currentWindow As HTMLWindowProxy
    Set currentWindow = oHTMLDoc.parentWindow
    Dim oTbl As HTMLTable
    For Each handicapOption In oHTMLDoc.getElementsByTagName("li")
      If handicapOption.innerText = "Summary" Then
      'I was able to extract data from Summary tab because this is the default tab that is active
        handicapOption.Click
        handicapOption.Focus
        Set oTbl = oHTMLDoc.getElementsByClassName("table race-handicapping-results")(0)

        Dim oRow As HTMLTableRow
        Dim i As Integer
        For i = 1 To oTbl.Rows.Length - 1
          Set oRow = oTbl.Rows(i)
          If oRow.className = "program-page-runner runner" Then
            Dim h As Horse
            Set h = New Horse
            h.HorseNumber = oRow.Cells(0).innerText
            h.HorseName = SplitGetPart(Replace(Trim(oRow.Cells(2).innerText), Chr(13), ""), 2, Chr(10))
            h.DaysOff = 0
            h.PowerRating = 0
            oRaceHorses.Add h
          End If
        Next i

      ElseIf handicapOption.innerText = "Snapshot" Then
        handicapOption.Click 'Does not work
        handicapOption.Focus 'Does not work
        handicapOption.fireevent "onChange" 'Does not work
        handicapOption.fireevent "onClick" 'Does not work
        'handicapOption.setActive => causes error
        'oHTMLDoc.parentWindow.execScript "selectHandicapping(option)" 'Causes error

        Set oTbl = oHTMLDoc.getElementsByClassName("table race-handicapping-results")(0)
        '<-Extract Snapshot Table

        '->
        End If
      Next handicapOption
    End Sub

1 Ответ

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

Попробуйте следующее в качестве примера выбора вкладок для перехода по ним.В вашем скрипте я думаю, что вы должны войти в систему с самого начала, так как для меня это требует.После входа в систему, если требуется, используйте синтаксис, как показано ниже, чтобы собрать нодлист из вкладок, которые нужно щелкнуть.Вы хотите нажать на элемент тега a внутри каждого li

Option Explicit
'VBE > Tools > References:
' Microsoft Internet Controls
Public Sub RetrieveInfo()
    Dim ie As InternetExplorer, tabs As Object, i As Long
    Set ie = New InternetExplorer

    With ie
        .Visible = True
        .Navigate2 "https://www.tvg.com/racetracks/FRE/freehold-raceway/autoplay/true?race=1"

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

        Set tabs = .document.querySelectorAll(".group li a")
        For i = 1 To tabs.Length - 1 'ignore first tab Summary
            tabs.item(i).Click 'click through tabs
        Next

        Stop

    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...