首页 > 解决方案 > 在 puppeteer 中使用提示符

问题描述

我正在尝试获取用户名和密码字段的用户输入,并使用 puppeteer 使用它来填充网页中的字段。我的两个提示没有正确存储,因为当我在 page.keyboard.type(username) 中调用它们时,它无法填充字段(我相信它是因为输入不是字符串,而所需的这个参数是字符串)

const puppeteer = require('puppeteer');
const prompt = require('prompt');

prompt.start();

(async() => {
    var result = await new Promise(function (resolve, reject) {
        prompt.get('username', function (err, result) {
            resolve(result);
        });
    });
    var result2 = await new Promise(function (resolve, reject) {
        prompt.get('password', function (err, result2) {
            resolve(result2);
        });
    });
    const browser = await puppeteer.launch({
        headless: false
    });

    const username = String(result);
    const password = String(result2);

    const page = await browser.newPage();
    await page.goto('');
    const BUTTON_SELECTOR1 = '#post-3782 > div > div > p.clear > span > a > img';
    await page.click(BUTTON_SELECTOR1);

    const USERNAME_SELECTOR = '#username';
    const PASSWORD_SELECTOR = '#password';
    const BUTTON_SELECTOR = '#col2 > form > div:nth-child(3) > button';

    await page.click(USERNAME_SELECTOR);
    await page.keyboard.type(username);

    await page.click(PASSWORD_SELECTOR);
    await page.keyboard.type(password);

    await page.click(BUTTON_SELECTOR);
    await page.waitForNavigation();
    await page.goto('');

/*
    await page.close();
    await browser.close();
    */
})();

标签: javascriptpromptpuppeteer

解决方案


该函数prompt.get()返回一个对象(即{ username: 'johndoe' })。

因此,以下示例显示了使用提示包获取 Puppeteer 用户名和密码的最佳方法:

const credentials = await new Promise((resolve, reject) => {
  prompt.get(['username', 'password'], (error, result) => {
    resolve(result);
  });
});

const username = credentials.username;
const password = credentials.password;

await page.type('#username', username);
await page.type('#password', password);

推荐阅读