Кукловод не распознает строку

#javascript #node.js #puppeteer

#javascript #node.js #кукловод

Вопрос:

 const puppeteer = require('puppeteer')

async function test() {
    // adjustment 1:
    const browser = await puppeteer.launch({
        headless: false,
        defaultViewport: null,
        args: ['--start-maximized', '--no-sandbox']
    });
    const page = await browser.newPage();
    await page.goto('https://cod.tracker.gg/warzone/profile/psn/xRUFFRYDERX/overview')

    await page.waitForSelector('#app > div.trn-wrapper > div.trn-container > div > main > div.content.no-card-margin > div.site-container.trn-grid.trn-grid--vertical.trn-grid--small > div:nth-child(2) > div > div.trn-grid__sidebar-right > div > div');
    const level = await page.$eval('#app > div.trn-wrapper > div.trn-container > div > main > div.content.no-card-margin > div.site-container.trn-grid.trn-grid--vertical.trn-grid--small > div:nth-child(2) > div > div.trn-grid__sidebar-right > div > div > div.highlighted.highlighted--giants > div > div > div.highlight-text')
    console.log(level);
}
test();
  

Я пытаюсь создать удаленный инструмент отслеживания кода, но я продолжаю получать сообщение об ошибке ниже, я думаю, что ему не удается интерпретировать переменную уровня как строку, но я не совсем уверен, почему?
(node:20216) UnhandledPromiseRejectionWarning: Error: Expected to get |string| or |function| as the first argument, but got "undefined" instead.

Ответ №1:

Вам не хватало всего pageFunction из page.$eval :

страница.$eval(селектор, функция страницы[, … аргументы])

Чтобы получить его содержимое, вам нужно будет добавить его в качестве второго аргумента, например: el => el.innerText .

Примечание: я немного обрезал ваш длинный селектор, но он все равно вернет тот же результат.

 const level = await page.$eval('div.highlight-text', el => el.innerText)   
  

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

1. Спасибо, я не был уверен, каким будет аргумент, есть ли у кукловода где-нибудь, где я мог бы увидеть список совместимых аргументов?

2. Я рекомендую изучить их официальные документы на pptr.dev . Там объясняется, каковы обязательные параметры, аргументы каждого метода. Наиболее важными методами являются $ , $$ , $eval $$eval , evaluate когда дело доходит до очистки данных. После 1-2 примеров станет ясно, как их использовать. Я думаю, что самый большой вывод: вам нужно оценить содержимое желаемых элементов DOM с правильным подходом, в этом вам помогут функции arrow. Удачи!