当前位置: 首页 > news >正文

【Puppeteer】‘left‘ is already pressed, ‘${button}‘ is already pressed 的解决办法

解决过程如下

这是我原来的代码,不管我怎么修改,都一直会出现 'left' is already pressed 这个错误

找了很多资料 搜了 很多网站都 找不到解决办法

async function dragAndDrop(page, canvasSelector, startX, startY, endX, endY) {const startCoordinates = await getAbsoluteCoordinates(page, canvasSelector, startX, startY);const endCoordinates = await getAbsoluteCoordinates(page, canvasSelector, endX, endY);// 移动到起始点并按下鼠标await page.mouse.move(startCoordinates.x, startCoordinates.y);await page.mouse.down();// 拖动到目标点await page.mouse.move(endCoordinates.x, endCoordinates.y);// 松开鼠标按钮await page.mouse.up();
}

后来跟 GPT 问答了10个来回,终于得到了 AI 的灵感提示,找到了解决办法

async function dragAndDrop(page, canvasSelector, startX, startY, endX, endY) {// 获取起始和结束点的绝对坐标const startCoordinates = await getAbsoluteCoordinates(page, canvasSelector, startX, startY);const endCoordinates = await getAbsoluteCoordinates(page, canvasSelector, endX, endY);// 移动到起始位置await page.mouse.move(startCoordinates.x, startCoordinates.y);await new Promise(resolve => setTimeout(resolve, 100)); // 等待 100 毫秒// 确保鼠标按钮未被按下,尝试释放按钮try {await page.mouse.up();} catch (e) { } // 捕获并忽略可能的错误(例如:按钮未按下的错误)// 按下鼠标按钮await page.mouse.down();await new Promise(resolve => setTimeout(resolve, 100)); // 等待 100 毫秒// 拖动到目标点await page.mouse.move(endCoordinates.x, endCoordinates.y);await new Promise(resolve => setTimeout(resolve, 100)); // 等待 100 毫秒// 松开鼠标按钮// await page.mouse.up();// 确保鼠标按钮未被按下,尝试释放按钮try {await page.mouse.up();} catch (e) { } // 'left' is already pressed 由于这个错误 一直出现,所以 逼不得已出此下策 做的兼容 // 捕获并忽略可能的错误(例如:按钮未按下的错误)
}

总结: 解决办法

 try {await page.mouse.up();} catch (e) { } // 捕获并忽略可能的错误(例如:按钮未按下的错误)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Qt常用控件——QRadioButton和QCheckBox
  • 【VSCode v1.93.0】手动配置远程remote-ssh
  • 开源可视化大屏superset Docker环境部署
  • 计算机网络练级第一级————认识网络
  • VSTO常见的异常
  • 【自然语言处理】实验一:基于NLP工具的中文分词
  • 7.1图像平移
  • 安科瑞Acrel-1000DP分布式光伏监控系统平台的设计与应用-安科瑞 蒋静
  • 哈希表、算法
  • jupyter notebook详细介绍-学习篇
  • 网络编程(UDP)
  • 云原生周刊:OpenTofu Registry 获得用户界面和 API|2024.9.9
  • 【C语言】揭开计数制的面纱:深入浅出二进制及二进制计算
  • JavaEE 第23节 TCP的流量控制与阻塞控制详解
  • 芝法酱学习笔记(0.1)——Ubuntu下,Java开发环境的基本搭建
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • C++类中的特殊成员函数
  • GraphQL学习过程应该是这样的
  • interface和setter,getter
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JavaScript服务器推送技术之 WebSocket
  • Python3爬取英雄联盟英雄皮肤大图
  • Rancher如何对接Ceph-RBD块存储
  • Redis字符串类型内部编码剖析
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • Zepto.js源码学习之二
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 仿天猫超市收藏抛物线动画工具库
  • 服务器之间,相同帐号,实现免密钥登录
  • 聊聊directory traversal attack
  • 面试遇到的一些题
  • 如何在GitHub上创建个人博客
  • 手写双向链表LinkedList的几个常用功能
  • 应用生命周期终极 DevOps 工具包
  • - 转 Ext2.0 form使用实例
  • No resource identifier found for attribute,RxJava之zip操作符
  • Spring Batch JSON 支持
  • 如何用纯 CSS 创作一个货车 loader
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • ###C语言程序设计-----C语言学习(3)#
  • #宝哥教你#查看jquery绑定的事件函数
  • #微信小程序:微信小程序常见的配置传值
  • (6)添加vue-cookie
  • (C语言)共用体union的用法举例
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (二十六)Java 数据结构
  • (论文阅读11/100)Fast R-CNN
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (四)汇编语言——简单程序
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)Windows2003安全设置/维护