【问题标题】:Sending A postMessage in puppeteer (Nodejs Library)在 puppeteer(Nodejs 库)中发送 postMessage
【发布时间】:2020-09-07 20:18:09
【问题描述】:

我知道如何接收 postMessages,但我希望向网站发送 postMessage 请求

只是一种格式

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

let command = yargs.argv._[0];

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


function sendMessageToContentScriptByPostMessage(data)
{
    window.postMessage({cmd: 'message', data: data}, '*');
}

    await page.goto(command, {waitUntil: 'networkidle0'});

    await browser.close();


})();

所以用户可以这样做,节点 postmessage.js https://www.example.com

【问题讨论】:

    标签: javascript node.js cross-domain puppeteer postmessage


    【解决方案1】:

    您可以使用page.evaluate 在浏览器中运行内容。然后就可以发postMessage了:

    await page.evaluate((data) => {
      window.postMessage({cmd: 'message', data: data}, '*');
    }, data);
    

    要记住两件事:

    • evaluate 在浏览器内部运行,而所有其他脚本都在 NodeJS 内部(您可以考虑远程与本地代码,本地 = NodeJS,远程 = Chrome)
    • 因此,evaluate 内部的变量与外部不同。您需要将 data 显式传递给 evaluate 以将其移至浏览器上下文中。

    【讨论】:

    • 好的,所以我制作了一个脚本 "pastebin.com/xYStdfbh" 。它给出了参考错误,我知道这是因为未定义数据。你能看看吗?
    • 我也在思考这个场景是否可以通过 puppeteer 中的“CreateCDPSession”实现?
    • 这是一个工作示例:pastebin.com/ZvDmCN8A。我在这里使用的是无头浏览器,但它会将消息打印到控制台。
    猜你喜欢
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多