将多个参数传递给page.evaluate()

时间:2018-11-07 10:35:33

标签: javascript puppeteer

我正在将一个附加参数传递给隐式map()函数。

在代码的此部分中找到

{ s: elementPath.match(RegExp(/=(.*?)]/))[1] }

我想将正则表达式传递给外部函数,而不是正则表达式,以便内部函数map()可以访问它

let res = await page.evaluate(elementPath => {
  return Array.from(
    document.querySelectorAll(elementPath),
    function(cin, index) {
      const result = {
        cinemaState: this.s, 
        cinemaIndex: index,
        cinemaId: cin.getAttribute("data-id"),
        cinemaName: cin.getAttribute("data-name"),
        cinemaURL: cin.getAttribute("data-url")
      };
      return result;
    },
    { s: elementPath.match(RegExp(/=(.*?)]/))[1] } // extracts state from the selector //TODO pass as additional argument 
  );
}, `div[data-state=${state}] div.top-select-option a.eccheckbox`);

我不确定如何将参数从外部函数级联为最内部的函数。希望获得任何指导

1 个答案:

答案 0 :(得分:1)

您可以将尽可能多的必要参数传递给page.evaluate,只要它们是可序列化的:

await page.evaluate( (selector, state) => {
    console.log(selector)
    console.log(state)
}, "div.top-select-option a.eccheckbox", state);