我一直在尝试搜索SO,但还是没有运气,我需要将以下“属性”参数传递给匿名函数,但是由于关闭它无法访问。
存档的最佳方法是什么? (页面是来自Puppeteer的对象):
getCssProperty: async function(selector, property) {
await page.waitForSelector(selector);
var val = await page.$eval(selector, x => {
return window.getComputedStyle(x).getPropertyValue(property); <- here it does not work, undefined
});
return val;
},
答案 0 :(得分:0)
从技术上讲,从Java脚本的角度来看,您的代码是正确的,property
回调中应提供page.$eval
。但是page。$ eval的特殊之处在于它的回调在无头浏览器中执行 ,并且与node.js方法和变量完全分开。
因此,为了在那一侧使用属性,我们需要将其专门传递给page。$ eval回调。
请参见语法in the docs:
page。$ eval(selector,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;
},