Как запускать команды javascript

#puppeteer

#кукловод

Вопрос:

Я использую Cheerio для синтаксического анализа html, а затем выполняю следующее:

  $("#price1").text()||  $("#price2").text() || undefined
 

В основном он пытается получить цены, если первый сбой и, наконец, возвращает undefined, если все не удается.

Как я могу сделать то же самое в Puppeteer ? Я не уверен, как использовать page.evaluate для выполнения этой цепочки if-else команд. (Я также использую Typescript.)

Ответ №1:

Кажется, аналог будет примерно таким:

 import puppeteer from 'puppeteer';

const browser = await puppeteer.launch();

try {
  const [page] = await browser.pages();

  await page.goto('https://example.org/'); // your URL here

  const price = await page.evaluate(() => {
    const element = document.querySelector('#price1') ||
                    document.querySelector('#price2');
    if (element) return Number(element.innerText);
    return undefined;
  });
  console.log(price);
} catch(err) { console.error(err); } finally { await browser.close(); }
 

Комментарии:

1. Привет, спасибо за помощь, но когда я попробовал, я понял Property 'innerText' does not exist on type 'Element'.ts(2339) , есть идеи, как это решить? При приведении его к any , я получаю NaN , несмотря на то, что там также есть селекторы цен..

2. Извините, я не знаю TS (

3. Существует также .textContent , но иногда он менее читаем: HTMLElement.innerText vs Node.textContent .

4. .textContent работает (жалоб от Typescript нет): D Спасибо!