puppeteer 的 ElementHandle.getProperty() 的预期行为是什么?
What's the expected behavior of puppeteer's ElementHandle.getProperty()?
木偶师 1.0.0-post。 getProperty()
方法似乎有些神奇。例如,如果您的页面包含:
<a href="/foo/bar.html">link</a>
那么这将return不是相对而是绝对 URL:
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
属性。看起来 puppeteer 的 getProperty()
实际上试图以某种方式解析样式,解析是 buggy/incomplete。获取原始文本的唯一方法是使用对 evaluateHandle(...)
的迂回调用。
这是一个预期的功能,而仅仅是一个文档错误吗?还是完全是人偶错误?
谢谢。
请参阅 HTML - attributes vs properties 以了解 HTML 属性和 DOM 属性之间的差异。
即使没有 Puppeteer,您也可以轻松看出差异。例如,在此页面上:
document.getElementById('nav-questions').href
// returns "https://whosebug.com/questions"
document.getElementById('nav-questions').getAttribute('href')
// returns "/questions"
木偶师 1.0.0-post。 getProperty()
方法似乎有些神奇。例如,如果您的页面包含:
<a href="/foo/bar.html">link</a>
那么这将return不是相对而是绝对 URL:
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
属性。看起来 puppeteer 的 getProperty()
实际上试图以某种方式解析样式,解析是 buggy/incomplete。获取原始文本的唯一方法是使用对 evaluateHandle(...)
的迂回调用。
这是一个预期的功能,而仅仅是一个文档错误吗?还是完全是人偶错误?
谢谢。
请参阅 HTML - attributes vs properties 以了解 HTML 属性和 DOM 属性之间的差异。
即使没有 Puppeteer,您也可以轻松看出差异。例如,在此页面上:
document.getElementById('nav-questions').href
// returns "https://whosebug.com/questions"
document.getElementById('nav-questions').getAttribute('href')
// returns "/questions"