首页 > 解决方案 > Xpath 不识别锚标签?

问题描述

我正在运行一些 Node.js 代码来抓取网站并从 html 的这一部分返回一些文本: chrome devtools 中 div 容器的屏幕截图

这是我用来获取它的代码

const fs = require('mz/fs');
const xpath = require('xpath');
const parse5 = require('parse5');
const xmlser = require('xmlserializer');
const dom = require('xmldom').DOMParser;
const axios = require('axios');

(async () => {
    const response = await axios.get('https://www.aritzia.com/en/product/sculpt-knit-tank-%28arjun-knit-top%29/66139.html?dwvar_66139_color=17388');
    const html = response.data;
    const document = parse5.parse(html.toString());
    const xhtml = xmlser.serializeToString(document);
    const doc = new dom().parseFromString(xhtml);
    const select = xpath.useNamespaces({"x": "http://www.w3.org/1999/xhtml"});
    const nodes = select("//x:div[contains(@class, 'pdp-product-brand')]/*/text()", doc);
    console.log(nodes.length ? nodes[0].nodeValue : nodes.length)
})();

上面的代码按预期工作——它打印Babaton.

但是,当我将上面的 xpath 换成包含a而不是*(ie //x:div[contains(@class, 'pdp-product-brand')]/a/text()) 的 xpath 时,它会告诉我nodes.length === 0.

我希望它给出相同的结果,因为它指向的 div实际上有一个子锚标签(见上面的截图)。我只是很困惑为什么它不起作用,a并且想知道是否有其他人知道答案。谢谢!

标签: javascripthtmlnode.jsxpathanchor

解决方案


推荐阅读