解决过程如下
这是我原来的代码,不管我怎么修改,都一直会出现 '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) { } // 捕获并忽略可能的错误(例如:按钮未按下的错误)