@wb_by
Учусь

Как получить элемент со страницы в puppeteer?

У меня есть такой код:
import puppeteer from 'puppeteer';
import $ from 'jquery';

let page, browser, input;

const contentHtml = `<html><body><input id='test' type='text'></body></html>`;

beforeAll(async () => {
  browser = await puppeteer.launch();
  page = await browser.newPage();
  await page.setContent(contentHtml);
  await page.evaluate(() => {
    input = page.$('input#test');
    console.log(input);
  });
});

describe('View', () => {
  test('Input is defined', async () => {
    expect(input).toBeDefined();
  });
});

afterAll(() => {
  browser.close();
});

Я пытаюсь сформировать страницу из строки... Не знаю можно ли так вообще? Что здесь исправить, чтобы получить этот инпут? На console.log ругается вот этим:
<br>
Evaluation failed: ReferenceError: page is not defined<br>
<br>
      at __puppeteer_evaluation_script__:2:5<br>
      at ExecutionContext._evaluateInternal (node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:217:19)<br>
      at ExecutionContext.evaluate (node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:106:16)<br>
      at Object. (src/plugin/tests/view.test.ts:12:3)<br>
  • Вопрос задан
  • 1883 просмотра
Решения вопроса 1
@d-sem
То, что происходит внутри page.evaluate, это аналог консоли браузера на странице.

Соответственно, в данном там нет не объекта page, ни $.

Чтобы получить этот инпут, нужно пользоваться стандартными средствами JS и возвратом значения из промисов.

const puppeteer = require('puppeteer');
const contentHtml = `<html><body><input id='test' type='text'></body></html>`;

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.setContent(contentHtml);
    const type = await page.evaluate(() => {
        return document.getElementById('test').type;
    }).catch(e => console.dir(e));
    console.dir(type);
    await browser.close();
})();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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