Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
567 views
in Technique[技术] by (71.8m points)

node.js - How do I pass a variable to a callback in puppeteer's $eval?

The following code doesn't work due to a ReferenceError when trying to access uid. I understand that the eval code is running inside the browser's context and thus doesn't have access to this variable, but I don't know how to pass the variable's value regardless:

var uid = 'foo@example.com';
await page.$eval('#uid', el => el.value = uid);
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The third argument of page.$eval() passes in arguments, so you would do:

await page.$eval('#uid', (el, _uid) => el.value = _uid, uid);

page.$eval() docs as of Puppeteer 1.3.0:

page.$eval(selector, pageFunction[, ...args])

  • selector <string> A selector to query page for
  • pageFunction <function> Function to be evaluated in browser context
  • ...args <...Serializable|JSHandle> Arguments to pass to pageFunction
  • returns: <Promise<Serializable>> Promise which resolves to the return value of pageFunction

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...