木偶操作者的ElementHandle.getProperty()的预期行为是什么?

时间:2018-02-07 00:41:45

标签: node.js puppeteer

Puppeteer 1.0.0-post。 getProperty()方法似乎有些神奇。例如,如果您的页面包含:

<a href="/foo/bar.html">link</a>

然后,这将不会返回 relative ,而是绝对网址:

const propertyHandle = await elementHandle.getProperty('href');
const href = await propertyHandle.jsonValue();
// href is 'https://localhost:8080/foo/bar.html'

另一方面,如果你要做更多的回旋:

const hrefHandle = await page.evaluateHandle(element => element.getAttribute('href'), elementHandle);
const href = await hrefHandle.jsonValue();
// href is '/foo/bar.html'

据我所知,puppeteer文档没有提到getProperty()的这种行为?

它变得更加丑陋,例如,如果你想获得一个元素的style属性。看起来木偶的getProperty()实际上试图以某种方式解析样式,解析是错误的/不完整的。获取原始文本的唯一方法是使用对evaluateHandle(...)的环形交叉调用。

这是一个预期的功能,只是一个文档错误?还是只是,完全是一个木偶虫?

感谢。

1 个答案:

答案 0 :(得分:1)

有关HTML属性和DOM属性之间的区别,请参阅HTML - attributes vs properties

你也可以轻松看到没有Puppeteer的差异。例如,在此页面上:

document.getElementById('nav-questions').href    
// returns "https://stackoverflow.com/questions"

document.getElementById('nav-questions').getAttribute('href')    
// returns "/questions"