作者:dnjaskn | 来源:互联网 | 2024-11-07 18:34
在处理木偶评估函数时,我发现可以顺利传递本机对象(如字符串、列表和数字),但每当尝试将JSHandle或ElementHandle作为参数传递时,函数会拒绝接受这些对象。这可能是由于这些句柄对象的特殊性质导致的,建议在使用时进行适当的转换或封装,以确保函数能够正确处理。
我可以很好地传递本机对象(字符串,列表,数字等),但是每当我尝试传递JSHandle或ElementHandle时,都会收到此错误消息:“ TypeError:将圆形结构转换为JSON是您在JSON.stringify()处传递嵌套的JSHandle?“
这是我的代码:
async getcolumnsnames(id='dashboardGrid') {
await this.loadObjects();
const grid = this.table
const detectedColumns = await this.page.evaluate(({grid}) => {
//const grid = document.getElementById(id)
const header = grid.getElementsByClassname('ag-header-viewport')[0]
const labelRow = header.getElementsByClassname('ag-header-row')[0]
const cells = labelRow.getElementsByClassname('ag-header-cell-text')
var children = []
for(x = 0; x cells[x].innerText.length > 0 ? children.push(cells[x].innerText) : null
}
return children
},{grid});
console.log(detectedColumns)
}
因此,如果我通过'id'来获取'grid'元素内部的内容,这没有问题(这是CSS选择器),但是如果我尝试直接传递一个句柄(grid),则会收到该错误消息。
所说的句柄就是这样:
this.table = await this.page.$(this.tableID);
在其他地方完全可以检测到相应的DOM元素(this.tableID为'[id =“ dashboardGrid”]'),所以我知道该句柄不是问题。
问题是,当您构建第一个像{grid}
这样的参数时,生成的对象不是JSHandle
的实例,因此求值对象将无法正确对待它。
这应该有效
const detectedColumns = await this.page.evaluate(grid => {
//Some code
},grid);