如何在带有puppeteer的弹出窗口中模仿div中的鼠标滚动?

时间:2018-08-15 21:54:40

标签: javascript web-scraping puppeteer

假设您有一个<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); 来模仿滚动。

1 个答案:

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