Как принять всплывающее окно с предупреждением JavaScript в Puppeteer? - PullRequest
0 голосов
/ 23 мая 2019

У меня есть скрипт, который использует Puppeteer для автоматического входа на корпоративный портал.Логин использует SAML.Таким образом, когда кукловод открывает экземпляр хрома и посещает страницу, на экране появляется всплывающее окно, чтобы подтвердить личность пользователя.Все, что мне нужно сделать, это либо вручную нажать кнопку «ОК», либо нажать Enter с клавиатуры.

Я пытался смоделировать нажатие клавиши Enter с помощью кукловода, но она не работает.

Экран входа в систему -

Login screen

Сценарий -

const puppeteer = require('puppeteer');


async function startDb() {
    const browser = await puppeteer.launch({
        headless:false,
        defaultViewport:null
    });
    const page = await browser.newPage();
    await page.goto("https://example.com");
    await page.waitFor(3000);
    await page.keyboard.press('Enter');
    console.log('Opened')
};


startDb(); 

** РЕДАКТИРОВАТЬ **

Certificate export

1 Ответ

0 голосов
/ 23 мая 2019

Существует решение, предложенное в этом выпуске :

По сути, просто перехватите запрос, затем запустите его самостоятельно, используя вашу любимую библиотеку httpclient, и ответьте на перехваченный запрос с информацией ответа.

const puppeteer = require('puppeteer');
const request = require('request');
const fs = require('fs');

(async () => {
    const browser = await puppeteer.launch();
    let page = await browser.newPage();

    // Enable Request Interception
    await page.setRequestInterception(true);

    // Client cert files
    const cert = fs.readFileSync('/path/to/cert.crt.pem');
    const key = fs.readFileSync('/path/to/cert.key.pem');

    page.on('request', interceptedRequest => {
        // Intercept Request, pull out request options, add in client cert
        const options = {
            uri: interceptedRequest.url(),
            method: interceptedRequest.method(),
            headers: interceptedRequest.headers(),
            body: interceptedRequest.postData(),
            cert: cert,
            key: key
        };

        // Fire off the request manually (example is using using 'request' lib)
        request(options, function(err, resp, body) {
            // Abort interceptedRequest on error
            if (err) {
                console.error(`Unable to call ${options.uri}`, err);
                return interceptedRequest.abort('connectionrefused');
            }

            // Return retrieved response to interceptedRequest
            interceptedRequest.respond({
                status: resp.statusCode,
                contentType: resp.headers['content-type'],
                headers: resp.headers,
                body: body
            });
        });

    });

    await page.goto('https://client.badssl.com/');
    await browser.close();
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...