当前位置: 首页 > 面试题库 >

木偶:在.evaluate()中传递变量

巫马庆
2023-03-14
问题内容

我试图将变量传递到Puppeteer中的page.evaluate()函数中,但是当我使用以下非常简单的示例时,该变量未定义。evalVar

我是Puppeteer的新手,找不到任何可构建的示例,因此我需要帮助将该变量传递到page.evaluate()函数中,以便在内部使用它。

const puppeteer = require('puppeteer');

(async() => {

  const browser = await puppeteer.launch({headless: false});
  const page = await browser.newPage();

  const evalVar = 'WHUT??';

  try {

    await page.goto('https://www.google.com.au');
    await page.waitForSelector('#fbar');
    const links = await page.evaluate((evalVar) => {

      console.log('evalVar:', evalVar); // appears undefined

      const urls = [];
      hrefs = document.querySelectorAll('#fbar #fsl a');
      hrefs.forEach(function(el) {
        urls.push(el.href);
      });
      return urls;
    })
    console.log('links:', links);

  } catch (err) {

    console.log('ERR:', err.message);

  } finally {

    // browser.close();

  }

})();

问题答案:

您必须pageFunction像这样将变量作为参数传递给:

const links = await page.evaluate((evalVar) => {

  console.log(evalVar); // should be defined now
  …

}, evalVar);


 类似资料:
  • 问题内容: 有人知道如何获取元素的或文本吗?甚至更好;如何单击具有特定元素的元素?这就是普通JavaScript的工作方式: 在此先感谢您的帮助! 问题答案: 这就是我获取innerHTML的方式:

  • 问题内容: 我正在尝试将有角度的应用程序从gulp转换为webpack。在gulp中,根据NODE_ENV,我使用gulp- preprocess替换html页面中的某些变量(例如,数据库名称)。使用webpack达到类似结果的最佳方法是什么? 问题答案: 有两种基本方法可以实现此目的。 定义插件 请注意,这只会按原样替换匹配项。这就是字符串具有其格式的原因。您可能有一个更复杂的结构,例如那里的一

  • 我需要在Dockerfile中传递环境变量,如下所示。我可以知道做这件事的有效方法吗。我尝试使用构建参数 但它没有用。 这是我的 Dockerfile 所以当我运行我的docker容器时,我相信我不想向它发送任何环境变量。 请指教。

  • 运行新页时,必须使用函数指定视口的大小:

  • 问题内容: 我希望能够使用ssh从我的机器上运行命令并传递环境变量 这是我正在尝试的: 是在进行ssh调用的计算机上设置的,并且由于该变量在远程主机上不存在,因此不会被提取。 如何传递的值? 问题答案: 如果您使用 代替 您的外壳程序会在将命令字符串发送到远程主机之前进行插值。

  • 问题内容: 如何在JavaScript中通过引用传递变量?我要对3个变量执行一些操作,因此我想将它们放在for循环中并对每个变量执行操作。 伪代码: 做这个的最好方式是什么? 问题答案: JavaScript中没有可用的“通过引用传递”。您可以传递一个对象(也就是说,您可以按值传递对一个对象的引用),然后让一个函数修改该对象的内容: 您可以使用数字索引遍历数组的属性,并根据需要修改数组的每个单元格