使用Firefox时Page.mouse.move为何将MouseEvent.buttons设为1?
对比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
相关产品推荐
相关产品推荐

