You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Firefox时Page.mouse.move为何将MouseEvent.buttons设为1?

Puppeteer控制Firefox时mousemove事件buttons属性异常问题

对比Puppeteer控制的Firefox浏览器与人工操作的鼠标移动事件,发现一个异常现象:Puppeteer触发的mousemove事件中,MouseEvent.buttons属性始终被设为1——即便没有按下任何按键;而人工操作时,无按键状态下该属性值为0。想确认是否遗漏了某些配置,或是这属于Puppeteer与Firefox的兼容性bug。

复现代码

以下代码可本地复现该行为,注意需指定product: 'firefox':

const browser = await puppeteer.launch({
  headless: false,
  product: 'firefox', // 关键配置:指定使用Firefox
  defaultViewport: null,
  devtools: true,
})

const page = await browser.newPage()

await page.setContent(`
    <html>
      <head>
        <style>
          html, body, #target {
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
          }
        </style>
      </head>
      <body>
        <div id="target">test</div>
        <script>            
          const target = document.getElementById('target')

          target.addEventListener('mousemove', (event) => {
            console.log(event)
          })
        </script>
      </body>
    </html>
  `)

await page.mouse.move(100,100)

运行代码后,在DevTools控制台查看输出的mousemove事件即可观察到buttons属性值异常。

分析与验证方向

  • 排除使用疏漏:代码中未调用mouse.down()等按压鼠标的操作,单纯调用mouse.move()就出现该问题,因此不属于操作错误。
  • 跨浏览器验证:在Chrome环境下运行相同代码,查看buttons属性是否为0,以此判断是Firefox专属问题还是Puppeteer的通用问题。
  • 尝试修复操作:在调用mouse.move()前显式执行await page.mouse.up(),看是否能强制将buttons属性重置为0。
  • 协议适配bug可能性:Puppeteer与Firefox通过Marionette协议交互,可能在模拟无按键鼠标移动时,没有正确设置buttons参数,默认传入了代表左键按下的1,这大概率属于兼容性bug。

在提交bug报告前,可以先到Puppeteer的代码仓库搜索类似issue,确认是否已有其他用户反馈过该问题。

内容的提问来源于stack exchange,提问作者Joao Scheuermann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:52:50