Отправлять данные и пользовательские команды для запущенного скрипта Puppeteer - PullRequest
1 голос
/ 03 августа 2020

Я новичок в Puppeteer, и у меня с ним мало проблем.

Обычно я хочу управлять сценарием с помощью пользовательского ввода, например, пока сценарий работает, скажите ему изменить страницу или содержимое элемента печати. Это будет выглядеть так:

  • Запустить сценарий кукловода, открыть браузер и страницу
  • Разрешить странице делать то, что она делает
  • Дождаться ввода пользователя, например: [>> changePage example.com]
  • Разобрать и выполнить команду пользователя, например: [await page.goto ('example.com')]

Вот чего я пытаюсь достичь, код ниже - всего лишь псевдокод.

const puppeteer = require('puppeteer');
const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin
});

function parse_user_input(user_str)  // executes user commands
{
  user_args = user_str.split(' ');
  if (user_args[0] == "changePage")
  {
    await page.goto(user_args[1]);
  }
}

function get_user_input()  // returns user input
{
  return rl.question('>> ');
}

(async() => {

  // code for opening the browser and page (already written)

  while (true)  // I don't want to block the running page
  {             // (in real code this gets wild and doesn't wait for input)
     user_str = get_user_input();
     parse_user_input(user_str);
  }

});

Спасибо за все ваши предложения!

1 Ответ

1 голос
/ 04 августа 2020

Может ли этот шаблон помочь?

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

function getInput(question) {
  return new Promise((resolve) => {
    rl.question(question, (answer) => {
      resolve(answer);
    });
  });
}

(async function main() {
  try {
    while (true) {
      const input = await getInput('Enter a command: ');
      console.log(`Entered command: ${input}`);
      if (input === 'break') break;
    }
    rl.close();
  } catch (err) {
    console.error(err);
  }
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...