如何将所需的模块对象传递给伪造者页面. [英] How to pass required module object to puppeteer page.evaluate

查看:46
本文介绍了如何将所需的模块对象传递给伪造者页面.的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  • 木偶版本:1.0.0
  • 平台/操作系统版本:Windows 10
  • Node.js版本:8.9.3

这是我的代码:

const puppeteer = require('puppeteer');
const varname = require('varname');

...

const page = await browser.newPage();
await page.goto(url);
let generalInfo = await page.evaluate(() => {
        let elements = Array.from(document.querySelectorAll('#order-details > table > tbody > tr'));
        let res = {};
        elements.map((tr) => {
            let split = tr.innerText.trim().split('\t');
            res[varname.camelback(split[0])] = split[1]; // Here is: ... Error: Evaluation failed: ReferenceError: varname is not defined
        });
        return res;
    }); 

...

await browser.close();

显示错误:

UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:1):错误:评估失败:ReferenceError:变量名未定义

UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Evaluation failed: ReferenceError: varname is not defined

推荐答案

您要在浏览器上下文中使用模块 varname .为此,您应该使用 page.addScriptTag() varname 注入浏览器,如下所示:

You want to use module varname in a browser context. To achieve that you should use page.addScriptTag() to inject varname to browser like this:

const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();

    await page.addScriptTag({ path: './node_modules/varname/build/varname.js' });
    const generalInfo = await page.evaluate(() => {
        return window.varname.camelback('foo_bar_baz');
    });

    console.log(generalInfo); // prints fooBarBaz
    await browser.close();
})();

这篇关于如何将所需的模块对象传递给伪造者页面.的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆