#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. Удачи!