Javascript 如何用木偶师在弹出窗口中模拟div内的鼠标滚动?
假设您有一个Javascript 如何用木偶师在弹出窗口中模拟div内的鼠标滚动?,javascript,web-scraping,puppeteer,Javascript,Web Scraping,Puppeteer,假设您有一个元素,它显示在鼠标单击上。里面有一个长长的项目列表,按包装的固定大小裁剪。据我所知,在div元素上设置.offsetTop可以解决这个问题,但我正试图在Puppeter headless浏览器中使用它的页面.evaluateHandle方法,该方法返回一个JSHandle。因此,如果无法获取此函数返回的原始元素,我很困惑如何准确地实现结果。在回调函数中设置offsetTop并没有什么区别,所以我肯定是做错了什么 const divHandle = await page.evalu
元素,它显示在鼠标单击上。里面有一个长长的项目列表,按包装的固定大小裁剪。据我所知,在div元素上设置.offsetTop
可以解决这个问题,但我正试图在Puppeter headless浏览器中使用它的页面.evaluateHandle
方法,该方法返回一个JSHandle
。因此,如果无法获取此函数返回的原始元素,我很困惑如何准确地实现结果。在回调函数中设置offsetTop
并没有什么区别,所以我肯定是做错了什么
const divHandle = await page.evaluateHandle(() => {
let overflowDiv = document.querySelectorAll(
`some > selector`
)[0];
overflowDiv.offsetTop = overflowDiv.offsetTop + 200
return overflowDiv.offsetTop;
});
顺便说一句,.asElement()
也会以某种意外的方式运行,我不完全了解如何尝试查找元素、获取其绝对位置或简单地设置参数
附加说明:正如API文档关于.evaluateHandle()
的说明:
…要在页面上下文中计算的函数
…page.evaluate和page.evaluateHandle之间的唯一区别是page.evaluateHandle返回页面对象(JSHandle)
更新
因此,要获取元素,必须从evaluateHandle
方法返回JSHandle,然后将其作为第二个参数传递给evaluate
方法,如下所示:
await page.evaluate(e => e, jsHandle);
但是主要的问题是如何操作属性,特别是
offsetTop
来模拟滚动。实际上答案非常简单。我错过了使用div.scrollTop=…
的最简单解决方案
try {
const res = await page.$eval(`div._weirdo`,
e => {
e.scrollTop = e.scrollTop + 200
return e
}
)
}
catch (e) {
console.log(e)
}
简单而优雅!为我工作,谢谢:)