如何使用 puppeteer 使用 x/y 坐标单击元素?

2024-02-02

我一直在尝试弄清楚如何使用 puppeteer 中的 x 和 y 坐标单击页面上的按钮,但我无法让它工作。这就是我目前正在使用的。

await page.mouse.click(x, y, {button: 'left'})

没有发生错误,它只是没有单击任何元素。所以我的猜测是我没有找到正确的位置。

我在 puppeteer 中使用默认视口,大小为 800 像素 x 600 像素。这就是我手动尝试在 DOM 中找到按钮的 x 和 y 的方法。

document.getElementsByClassName("classname")[0].getBoundingClientRect().x
> 90.125

document.getElementsByClassName("classname")[0].getBoundingClientRect().y
> 128

所以我将它添加到点击事件中。

await page.mouse.click(90.125 , 128, {button: 'left'})

但什么也没发生。我究竟做错了什么?


您可以找到 iframe 及其坐标,然后在该 iframe 内添加所需元素的偏移量,然后再单击:

const puppeteer = require("puppeteer");
 
(async () => {
  const browser = await puppeteer.launch({headless: false});
  const page = await browser.newPage();
 
  await page.goto("https://example.com/page_with_frame", {waitUntil: 'networkidle0'});
 
  // Find the iframe
  const frame = await page.waitForSelector("iframe");
  // Find its coordinates
  const rect = await page.evaluate(el => {
    const {x, y} = el.getBoundingClientRect();
    return {x, y};
  }, frame);
 
  // Values found manually by doing 
  // `document.querySelector('.yscp_link').getBoundingClientRect()`
  // in the dev console. Add 5 to them, because it's the top left corner
  const offset = {x: 213 + 5, y: 11 + 5};
 
  // Click
  await page.mouse.click(rect.x + offset.x, rect.y + offset.y);
 
  await frame.waitForNavigation({
    waitUntil: 'networkidle2',
  });
 
  await page.screenshot({ path: "example.png" });
 
  await browser.close();
})();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 puppeteer 使用 x/y 坐标单击元素? 的相关文章

随机推荐

  • 阿特金筛

    我一直在尝试学习生成素数的算法 并且在维基百科上发现了阿特金筛法 除了少数几个部分之外 我几乎理解该算法的所有部分 以下是问题 下面的三个二次方程是如何形成的 4x 2 y 2 3x 2 y 2 和 3x 2 y2 维基百科中的算法讨论了模
  • malloc(1) 的对齐要求是什么

    我听说成功调用malloc 返回适合任何类型对齐的指针 然而 要求这样做似乎毫无用处且浪费 malloc 1 返回一个指针 其对齐值大于1因为没有物体大于char可以存储到块中 对齐要求是什么malloc 1 malloc 2 etc 如果
  • 如何检测android内存不足?

    我的应用程序有很多图像 有时会由于内存不足而崩溃 我编写了在开发人员网站上找到的这个函数 public void onLowMemory 但问题是 在内存不足的情况下 这个函数永远不会被调用 我应该怎么做才能调用这个函数 当用户设备内存不足
  • 不再支持 android.useDeprecatedNdk=true

    I try to use OpenCv to build a facetracking camera app but I have a problem when I set up my OpenCv I have this error 我用
  • 如何使用/启用动画图标?

    有谁知道如何在 Angular Web 应用程序中使用 启用材料设计文档中显示的动画图标 https material io design iconography animated icons html usage https materi
  • R 和 scikit-learn 在逻辑回归分类任务中的比较

    我正在做 James Witten Hastie Tibshirani 2013 所著的 R 应用统计学习简介 一书中描述的逻辑回归 更具体地说 我将二元分类模型拟合到第 7 8 1 节中描述的 R 包 ISLR 中的 工资 数据集 预测变
  • 是否可以在 Visual Studio 中加载不匹配的符号?

    我有一个 Windows 小型转储 C 代码 和一个相应的 exe 文件 不幸的是 我没有完全匹配的 pdb 文件 但我确实有 pdb 其中包含在不同时间构建的完全相同的代码 在 Windbg 中 我可以使用 symopt 0x40 告诉它
  • 将双数四舍五入到十分位[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的 float 函数 https stackoverflow com questions 485525 round for float in c 好吧 假设我有电话号码8 47434 我想将其四
  • ts1206 装饰器在这里无效,Angular 2

    我开始编写 Angular 2 程序 但遇到了一个错误 ts1206 装饰器在这里无效 Component ts1206 decorators are not valid here selector my app moduleId modu
  • pandas 在重复 DataFrame.reset_index() 时崩溃

    这里有一个非常奇怪的错误 我正在使用 pandas 来合并多个数据帧 作为合并的一部分 我必须多次调用reset index 但是当我这样做时 它会在第二次或第三次使用 reset index 时意外崩溃 这是重现错误的最少代码 impor
  • 使用 google Sheets api 无需客户端登录

    我有一个从 Google 电子表格中获取数据的网站 我希望我的用户无需登录即可查看获取的数据 这可能吗 如何实现 为了获取和更新工作表数据 我只需要一个帐户 最好在服务器端登录 但是 我还没有看到任何不需要客户端登录的服务器端日志记录 以此
  • CORS - Facebook - 护照

    我正在尝试在我的 Nodejs Angular Express Passport 应用程序中通过 Facebook 实现 OAUTH 登录 但我对此很挣扎 我仍然收到 CORS 错误 XMLHttpRequest 已被 CORS 策略阻止
  • 使用 Spark 和 Java 进行分层采样

    我想确保我正在对数据的分层样本进行训练 Spark 2 1 及更早版本似乎支持这一点JavaPairRDD sampleByKey and JavaPairRDD sampleByKeyExact 正如所解释的here https spar
  • NextJS api 路由中的文件路径无法解析

    我正在尝试解析文件路径NextJS https nextjs org 我明白那个API路线 https nextjs org docs api routes introduction部署到 Vercel 时 工作方式略有不同 为了创建文件的
  • 使用子查询的 Sqlite 更新查询

    我必须更新表 test test 列 testconsent id 与表的 id 值test groupedconsent 哪里的patient id in test test and patient id in test groupedc
  • 使用 __setattr__ 和 __getattr__ 与 __slots__ 进行委托,而不会触发无限递归

    class A slots a def init self gt None self a 1 class B1 slots b def init self b gt None self b b def getattr self k retu
  • 如何在 MySQL 中获取当前日期和时间?

    是否有像 DATETIME 这样的值或命令可以在手动查询中使用来插入当前日期和时间 INSERT INTO servers server name online status exchange disk space network shar
  • WPF ListView/GridView 绑定

    我正在尝试制作一个简单的 VS 2017 扩展 它获取一个对象并显示它 我有数据返回并在文本框中显示 json 所以我知道数据正确返回 但由于某种原因 gv 仅显示单词 id 两次 因为它们是数据集中的两条记录 我已经尝试了很多事情 但我却
  • 动态加载字体 html jquery

    我正在开发一个允许用户输入一些文本并将其拖动到适当位置等的网站 我已经达到了我想提供字体选择的程度 我可以动态加载字体而不是一次性加载所有字体吗 例如 用户输入文本并选择使用 通用字体 1 是否可以使用 jquery 加载该字体 这样我就可
  • 如何使用 puppeteer 使用 x/y 坐标单击元素?

    我一直在尝试弄清楚如何使用 puppeteer 中的 x 和 y 坐标单击页面上的按钮 但我无法让它工作 这就是我目前正在使用的 await page mouse click x y button left 没有发生错误 它只是没有单击任何