извлечение значения из определенного узла в HTML с использованием VBScript - PullRequest
0 голосов
/ 04 октября 2018

Есть ли способ извлечь DomXPath из определенных HTML-элементов с помощью Vbscript в Internet Explorer ???

 Sub WaitForLoad 'Sub to wait for browser to load
 Do While IE.Busy
   WScript.Sleep 10
 Loop   
End Sub

Dim IE
Dim example1
Dim example2

    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True 
    IE.navigate "http://www.lotteimall.com/goods/viewGoodsDetail.lotte?goods_no=12570568"
    WaitForLoad 

Set objRoot = ie.document

MsgBox objRoot.getElementById("win10").name


Dim vXPath : vXPath = "//*[@id='win10']"

Set example1 = objRoot.selectSingleNode(vXPath) 'this works for xml
Set example2 = objRoot.getElemetByXPath(vXPath) 'this works in javascript

'none of these works in IE html

нет такой функции DomXPath, как 'getElemetByXPath' в объекте документа IE, я все еще не могправильный метод, который возвращает DomXPath.

Что касается javascript,

    function XPath(elm) {
           for (segs = []; elm && elm.nodeType == 1; elm = elm.parentNode) {
             if (elm.hasAttribute('id')) {
               segs.unshift('id("' + elm.getAttribute('id') + '")')
               return segs.join('/')
             }
             else if (elm.hasAttribute('class'))
               segs.unshift(elm.localName.toLowerCase() + '[@class="' + elm.getAttribute('class') + '"]')
             else {
               for (i = 1, sib = elm.previousSibling; sib; sib = sib.previousSibling)
                 if (sib.localName == elm.localName) i++
               segs.unshift(elm.localName.toLowerCase() + '[' + i + ']')
             }
           }
           return segs.length ? '/' + segs.join('/') : null
    }
    var result = windows.document.evaluate("//div[@class='division_product_tab']//img", document, null, XPathResult.ANY_TYPE, null);

    var node, nodes = []
    while (node = result.iterateNext())
      nodes.push(XPath(node));

    console.log(nodes);

Возвращает специфичный для объекта DomXpath.В этом случае "// div [@ class = 'Division_product_tab'] // img", который является объектом img.но это работает только в Dev Tool.

Я надеюсь, что может быть решение для этого

1 Ответ

0 голосов
/ 08 октября 2018

Вы можете попробовать использовать CSS-селекторы :

Set oIE = CreateObject("InternetExplorer.Application")
With oIE
    .Visible = True
    .Navigate "http://www.lotteimall.com/goods/viewGoodsDetail.lotte?goods_no=12570568"
    Do While .Busy Or .ReadyState <> 4
        WScript.Sleep 10
    Loop
    Do While .Document.readyState <> "complete"
        WScript.Sleep 10
    Loop
    Set oNode = .Document.querySelector("div.division_product_tab img")
    MsgBox oNode.src
End With

.querySelector() возвращает первый узел, а .querySelectorAll() возвращает коллекцию узлов.

...