Технически, с точки зрения Javascript, ваш код верен, property
должен быть доступным в page.$eval
обратном вызове. Но page. $ Eval отличается тем, что его обратный вызов выполняется в браузере без заголовка и полностью отделен от методов и переменных node.js.
Итак, чтобы использовать свойство для этогосторона, нам нужно специально передать его на страницу обратного вызова.
См. Синтаксис в документах :
page. $ Eval (селектор, pageFunction [, ... args])
args
- любые переменные, которые мы хотим передать, они должны быть сериализуемы с JSON.stringify ().
Поэтому вот как исправить getCssProperty
:
getCssProperty: async function(selector, property) {
await page.waitForSelector(selector);
var val = await page.$eval(selector, (x, property) => { // <-- accept here the element AND arguments
return window.getComputedStyle(x).getPropertyValue(property);
},
property // <-- pass property over to page.$eval callback
);
return val;
},