#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
vsNode.textContent
.4.
.textContent
работает (жалоб от Typescript нет): D Спасибо!