📜  如何在 js 中访问 xpath - Javascript (1)

📅  最后修改于: 2023-12-03 14:52:22.670000             🧑  作者: Mango

如何在 JavaScript 中访问 XPath

XPath 是一种在 XML 和 HTML 中定位元素的语言,可以使用 JavaScript 来解析和操作 XPath。与使用 DOM 相比,XPath 更加方便快捷,可以在不考虑文档结构的情况下轻松定位元素。本文将介绍如何在 JavaScript 中访问 XPath。

获取 XPath 表达式

首先,我们需要获取 XPath 表达式,也就是描述元素位置和属性的字符串。使用浏览器的开发者工具可以轻松获取 XPath 表达式,具体步骤如下:

  1. 在浏览器中打开需要获取 XPath 表达式的网页。
  2. 按下 F12 打开开发者工具。
  3. 切换到 Elements 标签页。
  4. 将鼠标移动到要定位的元素上。
  5. 右键单击该元素并选择 Copy -> Copy XPath。

此时,已将该元素的 XPath 表达式复制到了剪贴板中。

使用 XPath 来定位元素

在 JavaScript 中使用 XPath 定位元素,需要借助 DOMParser 和 document.evaluate 方法。DOMParser 可以将字符串转换成 DOM 对象,而 document.evaluate 方法可以使用 XPath 表达式来选择元素。

下面是一个例子,假设我们要获取页面中第一个 p 标签的内容:

// 获取第一个 p 标签的 XPath 表达式
var xpath = '/html/body/p[1]';

// 创建 DOMParser 对象
var parser = new DOMParser();

// 将 HTML 字符串转换为 DOM 对象
var doc = parser.parseFromString(document.documentElement.outerHTML, 'text/html');

// 在 doc 中使用 XPath 定位元素
var elem = doc.evaluate(xpath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

// 获取元素内容
var content = elem.textContent;

console.log(content);

在上面的例子中,我们首先获取了第一个 p 标签的 XPath 表达式,并创建了一个 DOMParser 对象。然后,将页面 HTML 字符串解析为 DOM 对象,并使用 evaluate 方法在 DOM 对象中定位元素。最后,获取元素的文本内容并输出。

使用 XPath 来遍历元素

除了定位单个元素,XPath 可以使用轴来遍历多个元素。例如,我们可以使用 XPath 表达式 /html/body//a 来获取页面中所有的链接。

下面是一个例子,假设我们要获取页面中所有链接的 href 属性:

// 获取所有链接的 XPath 表达式
var xpath = '/html/body//a';

// 创建 DOMParser 对象
var parser = new DOMParser();

// 将 HTML 字符串转换为 DOM 对象
var doc = parser.parseFromString(document.documentElement.outerHTML, 'text/html');

// 在 doc 中使用 XPath 遍历元素
var elems = doc.evaluate(xpath, doc, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);

// 遍历元素并获取 href 属性
var elem;
var urls = [];
while (elem = elems.iterateNext()) {
  urls.push(elem.href);
}

console.log(urls);

在上面的例子中,我们首先获取了所有链接的 XPath 表达式,并创建了一个 DOMParser 对象。然后,将页面 HTML 字符串解析为 DOM 对象,并使用 evaluate 方法在 DOM 对象中遍历元素。最后,遍历元素并获取其 href 属性,并将所有链接的 href 属性存储到一个数组中。