【问题标题】:Imported functions not working in puppeteer导入的函数在 puppeteer 中不起作用
【发布时间】:2020-04-04 21:28:54
【问题描述】:

从不同文件中导入长 JS 函数:

let startTheShow = require('./scraper.js');

然后尝试在页面上使用该功能。

await page.evaluate(() => {

    startTheShow('info','hi','hi');


})

预期的结果是什么? 导入的函数会在页面上运行

会发生什么? “startTheShow 未定义”

将原始脚本放在评估中,而不是将模块导入索引,可以解决问题。不幸的是,这个选项在索引文件中造成了很多混乱。知道为什么我不能使用这个导入的函数吗?

【问题讨论】:

    标签: javascript node.js web-scraping automation puppeteer


    【解决方案1】:

    来自docs

    pageFunction <function|string> 要在页面上下文中评估的函数

    evaluate(() => startTheShow()) 表示页面上下文中应该有一个 startTheShow 函数,我假设没有任何函数,并且页面上下文不知道 startTheShow 是什么。您应该传递./scraper.js 的字符串版本或startTheShow 函数来评估。

    从文档中传递字符串的示例:

    console.log(await page.evaluate('1 + 2')); // prints "3"
    

    【讨论】:

    • 哦,我明白了。您是否认为可能有一种方法可以将此代码注入页面然后从那里运行它?也许来自文档的 page.addStyleTag:github.com/puppeteer/puppeteer/blob/master/docs/…
    • @Theprocodernotreallyxd 你可以使用page.exposeFunction() 来达到这个目的。
    • 谢谢,我现在正在使用这个:await page.exposeFunction("startTheShow",startTheShow); await page.evaluate(async function() { await startTheShow('erezshahaf2@gmail.com','hi','banana'); }) 但它会返回一个错误:错误:评估失败:TypeError:this._pageBindings。 get(...) 不是一个函数有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多