假设您有一个<div>
元素,该元素会在鼠标单击时出现。在它的内部,有一长串由包装的固定大小裁切而成的项目。据我了解,在div元素上设置.offsetTop
可以解决此问题,但是我正在尝试使用伪造的无头浏览器通过返回page.evaluateHandle
的{{1}}方法来做到这一点。所以我很困惑,如果我无法获得此函数返回的原始元素,那么如何准确地实现结果。并且在回调中设置JSHandle
并没有什么不同,所以我肯定做错了。
offsetTop
顺便说一句, const divHandle = await page.evaluateHandle(() => {
let overflowDiv = document.querySelectorAll(
`some > selector`
)[0];
overflowDiv.offsetTop = overflowDiv.offsetTop + 200
return overflowDiv.offsetTop;
});
的行为也有些出乎意料,我没有完全了解如何找到元素,获取其绝对位置或只是设置参数。
附加说明:如API文档所述,关于.asElement()
:
...要在页面上下文中评估的功能
... page.evaluate和page.evaluateHandle之间的唯一区别是page.evaluateHandle返回页内对象(JSHandle)。
更新
因此,要获取元素,必须从.evaluateHandle()
方法返回JSHandle,然后将其作为第二个参数传递给evaluateHandle
方法,如下所示:
evaluate
但是主要的问题是如何操作属性,特别是await page.evaluate(e => e, jsHandle);
来模仿滚动。
答案 0 :(得分:1)
实际上,答案很简单。我错过了div.scrollTop = ...
最简单的解决方案。
try {
const res = await page.$eval(`div._weirdo`,
e => {
e.scrollTop = e.scrollTop + 200
return e
}
)
}
catch (e) {
console.log(e)
}