我知道我可以使用
await page.type('#inputID', 'blah');
在文本框中插入“blah”(在我的情况下,该文本具有现有文本,仅附加“blah”),但是,我找不到任何允许删除或替换现有文本的页面方法。
最佳答案
您可以使用page.evaluate
来按需操作DOM:
await page.evaluate( () => document.getElementById("inputID").value = ""; )
但是有时仅操作给定的字段可能还不够(目标页面可以是带有事件侦听器的SPA),因此最好模拟真实的按键。
在这里,我们按Backspace的次数与该字段中存在字符的次数相同:
const inputValue = await page.$eval('#inputID', el => el.value); 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");
或按住快捷键:Ctrl+A —— 注:这种方式在Mac下存在兼容性问题,即不起作用
// (1) 获取焦点 await page.focus(selector); // (2) 按住Ctrl键 await page.keyboard.down('Control'); // (3) 按下A键 await page.keyboard.press('KeyA'); // (4) 松开Ctrl键 await page.keyboard.up('Control');