javascript - 如何使用 Puppeteer 从输入中删除现有文本?

标签 javascript node.js google-chrome-devtools puppeteer headless-browser

我正在尝试在包含当前记录标题的可编辑输入中测试修改文本 - 我希望能够测试编辑此类文本,并将其替换为其他内容。

我知道我可以使用 await page.type('#inputID', 'blah'); 将“blah”插入文本框(在我的情况下,现有文本仅追加“等等”),但是,我找不到任何页面方法1允许删除或替换现有文本。

最佳答案

你可以使用 page.evaluate 来操作你认为合适的 DOM:

await page.evaluate( () => document.getElementById("inputID").value = "")

但有时仅操作给定字段可能还不够(目标页面可能是带有事件监听器的 SPA),因此最好模拟真实的按键操作。以下示例来自 the informative issue在 puppeteer 的 Github 上关于这个任务。

在这里,我们按 Backspace 的次数与该字段中的字符一样多:

const inputValue = await page.$eval('#inputID', el => el.value);
// focus on the input field
await page.click('#inputID');
for (let i = 0; i < inputValue.length; i++) {
  await page.keyboard.press('Backspace');
}

另一个有趣的解决方案是单击目标字段 3 次,以便浏览器选择其中的所有文本,然后您可以输入您想要的内容:

const input = await page.$('#inputID');
await input.click({ clickCount: 3 })
await input.type("Blah");

关于javascript - 如何使用 Puppeteer 从输入中删除现有文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52631057/

相关文章:

javascript - 如何在 Chrome 开发工具中显示自己的事件

google-chrome - VBScript CreateObject 谷歌浏览器

javascript - 当 JS 在不同域上加载时,IE6、IE7 过期的 Cookie 会丢失

javascript - 是否可以在 for 循环中设置 span 上唯一的第一个元素?

javascript - 正则表达式根据多个单词的存在来选择句子

javascript - 保存用户的套接字以在不同页面上使用

javascript - 这个 javascript 对象修改是如何工作的?我不明白范围,它不会持续存在

javascript - 将 ES7 async/await 与 Node 、webpack 和 babel-loader 一起使用时出错

javascript - $(window).load(function()) 和 NProgress JQuery 插件。页面已完全加载,但 NProgress 仍在运行

google-chrome-devtools - 谷歌浏览器颜色选择器没有响应