Задать вопрос
@Belavor

Как встроить puppeteer в node.js telegram bot?

как встроить puppeteer в node.js telegram bot? или дебажить?
у меня есть скрипт который открывает сайт, логинится, делает скрин и закрывается. на puppeteer
ну и я хочу это встроить в бот что бы по команде отправил скрин
примерно это на карякал но не работает как быть
bot.onText(/\/gr(.+)/, function(msg, match) {
const edua = require('./scrapper');
var chatId = msg.chat.id;
var photo = 'grades.png';
(async() => {
  s
  await edua.initialize();

  await edua.login('login', 'password');

  await edua.grade();

  debugger;

})();
  bot.sendPhoto(chatId, photo, { caption: ' ' });
});

const puppeteer = require('puppeteer');
const eduEnu = 'https://edu.enu.kz/';
const grades = 'https://edu.enu.kz/current_progress_gradebook_student';

const platonus = {
     browser: null,
     page: null,

     initialize: async () => {
          platonus.browser = await puppeteer.launch({
               headless: false
          });
          platonus.page = await platonus.browser.newPage();
          await platonus.page.setViewport({width: 1000, height: 500});
     }, 
     
     login: async (username, password) => { 
          await platonus.page.goto(eduEnu, { waitUntil: 'networkidle2' });
          //await platonus.page.waitFor(1000);
          // let closeButton = await platonus.page.type('div[class="backdrop-close"]');
          // await closeButton[0].click();
          
          
          await platonus.page.type('input[name = "iin"]', username, {delay: 1});
          await platonus.page.type('input[name = "password"]', password, {delay: 1});

          let loginButton = await platonus.page.$x("//button[contains(text(), 'Кіру')]");
          await loginButton[0].click();
          await platonus.page.waitFor(5000);
     },

     grade: async () => {
          await platonus.page.goto(grades, { waitUntil: 'networkidle2' });
          await platonus.page.waitFor(2000);
          await platonus.page.screenshot({path: 'grades.png', fullPage: true});
          platonus.browser.close();

     }
}

module.exports = platonus;
  • Вопрос задан
  • 615 просмотров
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
you_are_enot
@you_are_enot
Пограммист любитель
Попробуй так

const edua = require('./scrapper');

bot.onText(/\/gr(.+)/, (msg, match) => {
    const chatId = msg.chat.id;
    const photo = 'grades.png';

    edua('login', 'password').then(() => {
        bot.sendPhoto(chatId, photo, { caption: ' ' });
    }).catch((err) => {
        console.log(err)
    });
});


const puppeteer = require('puppeteer');
const eduEnu = 'https://edu.enu.kz/';
const grades = 'https://edu.enu.kz/current_progress_gradebook_student';

async function platonus(login, password) {
    const browser = await puppeteer.launch({ headless: false });
   const page = await platonus.browser.newPage();
   await page.setViewport({width: 1000, height: 500});

   await page.goto(eduEnu, { waitUntil: 'networkidle2' });

   await page.waitForSelector('input[name = "iin"]')
   await page.type('input[name = "iin"]', username, {delay: 1});

   await page.waitForSelector('input[name = "password"]')
   await page.type('input[name = "password"]', password, {delay: 1});

   const loginButton = await platonus.page.$x("//button[contains(text(), 'Кіру')]");
   await loginButton[0].click();
   await platonus.page.waitFor(5000);

   await page.goto(grades, { waitUntil: 'networkidle2' });
   await page.waitFor(2000);
   await page.screenshot({path: 'grades.png', fullPage: true});

   browser.close();
};

module.exports = platonus


P.S. Использовать статические таймауты не особо хорошая идея. Лучше жди появления нужного элемента. Плюс, вместо waitUntil: 'networkidle2' при загрузке страницы лучше использовать domcontentloaded/
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы