首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Puppeteer:如何用document.evaluate计算xpath?

Puppeteer:如何用document.evaluate计算xpath?
EN

Stack Overflow用户
提问于 2020-11-03 01:00:56
回答 1查看 192关注 0票数 0

给定一个困难的木偶任务,我必须在带有上下文节点的木偶中计算XPath。所以我不能使用page.$x

我知道它可以通过Javascript函数document.evaluate(xpathExpression, contextNode, namespaceResolver, resultType, result)来实现,所以我尝试了以下代码:

代码语言:javascript
复制
const puppeteer = require('puppeteer');

async function f(page, xpath) {
    try {
        return page.evaluate((xpath) => {
            return document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null)
        }, xpath)
    } catch (e) {
        console.log(e)
    }
}

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('http://personalitycore.com/a.html');
    let p = await f(page, '//p')
    console.log(p)
    await browser.close();
})();

http://personalitycore.com/a.html

代码语言:javascript
复制
<head>
</head>
<body>
<p>
text_node1
<span>span_node1</span>
text_node2
<span>span_node2</span>
</p>
</body>

然后运行我的代码:

代码语言:javascript
复制
/usr/local/bin/node /Users/xxxx/example.js
{}

它只返回一个空对象。

但是这个脚本在Chrome中做得很好:

谁能给我一些关于用document.evaluate在傀儡中评估XPath的提示

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-03 03:16:35

不幸的是,page.evaluate()只能传输可序列化的值(粗略地说,就是JSON可以处理的值)。当document.evaluate()返回一个不可序列化的DOM元素(它包含方法和循环引用)时,它将被替换为一个空对象。您需要返回可序列化的值(例如,属性或文本内容)或使用page.evaluateHandle()ElementHandle API之类的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64649950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档