ОБНОВЛЕНИЕ Я работаю в докере и использую версию кукловода 1.11.0, так как это последняя версия , которая поддерживается Alpine Linux . Я также бегу с --no-sandbox
Просто ради организации кода, я бы хотел сделать это в кукловоде ...
async function crawler(url, evaluater) {
const browser = await puppeteer.launch(...)
const page = await browser.newPage()
await page.goto(url)
const result = await page.evaluate(evaluater)
return result
}
crawler('https://website.com', () => {
return document.querySelectorAll(...)
})
Но я получаю следующую ошибку ....
Error: Evaluation failed: TypeError: Cannot read property
'querySelectorAll' of undefined
Я предполагаю, что функция-оценщик фактически передана eval
, поэтому я ожидаю, что в этом случае будет работать ниже
const result = await page.evaluate(evaluater.toString())
Это тоже не работает. Сообщение об ошибке отсутствует, но возвращается undefined
. Если я переместу функцию в строку, данные вернутся.
Есть ли способ, которым я могу предоставить обратный вызов page.evaluate
, который не определен внутри строки, но передан как переменная?