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)
}

简单而优雅!为我工作,谢谢:)