parentNode为null –遍历DOM以构造XPath

时间:2018-09-07 14:46:17

标签: javascript google-chrome dom xpath puppeteer

在给定e句柄puppeteer及其页面e的情况下,此函数返回元素page的XPath:

async function getXpathOfElement(page, e) {
  return await page.evaluate(e => {
    var xpath = "";
    var pos, tmpitem2;

    while (e !== document.documentElement) {
      pos = 0;
      tmpitem2 = e;

      while (tmpitem2) {
        // if is ELEMENT_NODE of the same name
        if (tmpitem2.nodeType === 1 && tmpitem2.nodeName === e.nodeName) {
          ++pos;
        }
        tmpitem2 = tmpitem2.previousSibling;
      }

      xpath = e.nodeName + "[" + pos + ']' + '/' + xpath;
      e = e.parentNode;
    }

    xpath = '/' + document.documentElement.nodeName + '/' + xpath;
    xpath = xpath.replace(/\/$/, '');

    return xpath;
  }, e);
}

它按预期方式工作,但并非始终如此:对于pagee的一对特定对象,在while完成一些循环之后,e.parentNode变成{{1} },其中null是有效的e DOM节点,其父节点是<div>,正如我从html所观察到的那样。

有趣的是,<li>在发布之前完成了一些循环,因此部分遍历了DOM结构。

0 个答案:

没有答案