google-chrome-devtools - 在 puppeteer 中如何等待 DOM 元素加载然后单击
问题描述
在 puppeteer 中如何等待 DOM 元素加载然后单击。我正在尝试访问一个简单的页面,点击开始按钮,然后应该会出现一个文本字段,我需要输入该文本字段。
代码如下。
const puppeteer = require('puppeteer');
const sleep = (waitTimeInMs) => new Promise(resolve => setTimeout(resolve, waitTimeInMs));
(async () => {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await page.goto('https://janus.conf.meetecho.com/videocalltest.html');
await page.click('#start', {waitUntil: 'domcontentloaded'});
//await sleep(5000);
await page.type('#username', 'austin');
await sleep(5000);
await browser.close();
})();
但是,如果我休眠 5 秒(在上面的代码中注释),那么我可以在文本字段中输入。
我想避免睡觉。请建议解决方法。
解决方案
您需要等待元素可见,因为该元素存在于 DOM 中,但不可见。
这是有效的脚本:
(async () => {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await page.goto('https://janus.conf.meetecho.com/videocalltest.html');
await page.click('#start');
await page.waitForSelector('#username', { visible: true });
await page.type('#username', 'austin');
// await browser.close(); // commented it just to make sure that text is typed in the input before close browser.
})();
推荐阅读
- javascript - CSS 元素的颜色没有正确改变
- c++ - 如何取消引用 nullptr 并返回正确的对象?
- python - 如何使用 Python 在目录中查找最新文件
- django - IntegrityError:“user_id”列中的空值违反非空约束(Django Rest Framework)
- c# - 将排序字典转换为数组
- python - 在 Django 中更新表单
- angular - Angular中模块之间的路由
- python - 从包含对象的列表中获取数据
- ckeditor - InsertHtml 在错误的位置添加指向 ckeditor 的链接
- dialogflow-es - DialogFlow 电话网关国家代码