1

我有一个工作区,可以在其中添加不同的对象。有一种场景,双击后,可以在工作区中自动添加一个对象。我经历了不同的解决方案,但没有一个真正奏效。

这是我尝试过的:

await page.evaluate(selector => {
  var targLink = document.querySelector(selector);
  var clickEvent = document.createEvent('MouseEvents');
  clickEvent.initEvent('dblclick', true, true);
  targLink.dispatchEvent(clickEvent);
}, selector)
4

2 回答 2

5

您可以使用mouse.click(x, y[, options]).


首先得到xy

const selector = "#elementID";

const rect = await page.evaluate((selector) => {
  const element = document.querySelector(selector);
  if (!element) return null;
  const { x, y } = element.getBoundingClientRect();
  return { x, y };
}, selector);

然后clickCount作为选项传递以模拟双击。

await page.mouse.click(rect.x, rect.y, { clickCount: 2 });

完整代码:

const puppeteer = require("puppeteer");

(async () => {
  const browser = await puppeteer.launch();

  const page = await browser.newPage();

  await page.goto("https://www.example.com", {
    waitUntil: "domcontentloaded",
  });

  const selector = "#elementID";

  const rect = await page.evaluate((selector) => {
    const element = document.querySelector(selector);
    if (!element) return null;
    const { x, y } = element.getBoundingClientRect();
    return { x, y };
  }, selector);

  if (rect) {
    await page.mouse.click(rect.x, rect.y, { clickCount: 2 });
  } else {
    console.error("Element Not Found");
  }

  await browser.close();
})();

更新

您可以通过使用delay选项在两次点击之间添加延迟。下面的代码将以 100 毫秒的延迟单击双击元素。

await page.mouse.click(rect.x, rect.y, { clickCount: 2, delay: 100 });
于 2020-10-16T07:40:41.643 回答
0

你也可以这样做:

await page.click(selector, { clickCount: 2 });

正如这里提到的

于 2022-02-28T20:56:26.120 回答