vba как получить значение с сайта javascript - PullRequest
0 голосов
/ 13 апреля 2020

на веб-странице у меня есть это:

<table class="infobox"><tr>
<td>
<table class="infobox-inner-table">
<tr class="infobox-heading">
<th id="infobox-quick-facts">Quick Facts</th>
</tr>
<tr><td>
<div class="infobox-spacer"></div>
<div id="infobox-contents-0"></div>
<script>
      WH.markup.printHtml("[ul][li]Requires level 20[\/li][li]Loremaster: Yes[\/li][li]Side: [span class=icon-alliance]Alliance[\/span][\/li][li][icon name=quest_start]Start: [url=\/npc=41129\/surveyor-thurdan]Surveyor Thurdan[\/url][\/icon][\/li][li][icon name=quest_end]End: [url=\/npc=41129\/surveyor-thurdan]Surveyor Thurdan[\/url][\/icon][\/li][li]Sharable[\/li][li]Added in patch 4.0.3.13277[\/li][\/ul]", "infobox-contents-0", {
                allow: WH.markup.CLASS.STAFF,
                dbPage: true,            });
        </script>
</td></tr>
</table>

внутри javascript это "Добавлено в патч 4.0.3.13277" и через VBA мне нужно получить номер патча, не могли бы вы помочь с этим ? Лучше всего было бы использовать getelementsbyclassname ("infobox"), поэтому он будет только смотреть на это, однако тогда я не знаю, что делать дальше.

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Почему бы вам напрямую не осмотреть скрипт, чтобы найти номер патча? Вот как я имел в виду:

1 голос
/ 13 апреля 2020

Вы можете регулярное выражение соответствующего содержимого сценария, а затем заменить \/ на /; заменить [ на <; заменить ] на >; затем выполните синтаксический анализ html и получите последний элемент li.

Option Explicit

Public Sub GetTextFromScriptTag()
    'required references Microsoft HTML Object Library; Microsoft VBScript Regular Expressions

    'your code

    Dim html As MSHTML.HTMLDocument, re As VBScript_RegExp_55.RegExp

    'Set html = htmlsourceobject(e.g.ie.document) ''< this line you need to add in html source object from your prior code
    Set re = New VBScript_RegExp_55.RegExp

    re.Pattern = "WH\.markup\.printHtml\(""(.*?)"","

    html.body.innerHTML = "<body>" & Replace$(Replace$(Replace$(re.Execute(html.body.innerHTML)(0).SubMatches(0), "[", "<"), "]", ">"), "\/", "/") & "<\body>"

    Dim liNodes As Object

    Set liNodes = html.querySelectorAll("li")
    Debug.Print liNodes.item(liNodes.Length - 1).innerText

End Sub

Regex:

enter image description here

...