木偶:如何在评估函数中使用XPath和外部变量?

时间:2020-07-24 14:10:09

标签: json xpath typeerror puppeteer evaluate

我试图在Puppeteer的评估函数中使用XPath和外部变量,但是有一个问题:

  • 如果我通过传入外部变量使用评估函数,那么我将无法传递XPath,
  • 如果我删除XPath,一切都很好,但是我需要使用XPath。

我刚得到这个错误:

UnhandledPromiseRejectionWarning:TypeError:转换循环 构造为JSON ->从具有构造函数'BrowserContext'的对象开始 |属性'_browser'->具有构造函数'Browser'的对象 ---属性'_defaultContext'闭合了圆圈您是否正在传递嵌套的JSHandle? 在JSON.stringify()

这是我的代码(您可以忽略较长的XPath选择器):

let lastNameIn = await page.$x('//*[contains(translate(@placeholder,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ"), "LAST") and contains(translate(@placeholder,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ"), "NAME"))]')

lastname = "test"

await page.evaluate((lastname, lastNameIn) => { 
    el => el.value = lastname, lastNameIn[0]    
}, lastname, lastNameIn)

1 个答案:

答案 0 :(得分:0)

您应该只为el.value分配一个值,然后在第一个参数位置lastNameIn[0]上标记要评估的元素,作为第二个参数,您可以添加依赖变量:{{1 }}到lastName

请参阅:page.evaluatepageFunction

page.evaluate(pageFunction[, ...args])