使用puppeteer和express js发送自动whatsapp消息

问题描述 投票:0回答:1

我正在尝试使用 Express 服务器中的 puppeteer lib 向我的联系人之一发送 Whatsapp 消息。要发送消息,我必须通过 web.whatsapp.com 二维码授权我的 Whatsapp。

使用 puppeteer,我尝试截取 Whatsapp Web qrcode 的屏幕截图,并将其作为对我的 Express 服务器中的 HTTP GET 请求的响应发送。但是当我尝试扫描二维码时,我收到类似“无法扫描代码。请确保您在 Whatsapp 网络上并重试”的错误。下面的代码相同;

app.get("/handshake",((req,res,next)=>{
  console.log(req.body);

  (async () => {
      const browser = await puppeteer.launch();
      const page = await browser.newPage();
      await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3641.0 Safari/537.36');
      await page.goto(WHATSAPP_LOGIN_URL, {
        waitUntil: "networkidle2",
      });
      await page.setViewport({
        width: 1024,
        height: 800,
      });
      const qrElement = await page.$("#app > div > div > div.landing-window > div.landing-main > div > div._3l6Cf > div");
      await qrElement.screenshot({path:"./whatsapp.jpg",type:"jpeg"});
      await browser.close();
      res.sendFile("./whatsapp.jpg",{root:__dirname});        

    })()

  }))

作为一种解决方法,使用 puppeteer 我可以访问包含 qr 代码 div 的 div,其中我获取 data-ref 属性的值,并使用我发送的 qrcode npm 模块将该值转换为 qr 代码作为对 Express 服务器中我的 GET HTTP 请求的响应。如果我尝试扫描二维码,WhatsApp 会显示相同的错误“无法扫描代码。请确保您是 Whatsapp Web,然后重试”。下面是我的代码;

app.get("/handshake",((req,res,next)=>{
  console.log(req.body);

  (async () => {
      const browser = await puppeteer.launch();
      const page = await browser.newPage();
      await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3641.0 Safari/537.36');
      await page.goto(WHATSAPP_LOGIN_URL, {
        waitUntil: "networkidle2",
      });
      await page.setViewport({
        width: 1024,
        height: 800,
      });
       const dataref = await page.evaluate(()=>{
         return document.getElementsByClassName('_1yHR2')[0].dataset.ref;
      })
       console.log(dataref);
      const qrElement = await page.$("#app > div > div > div.landing-window > div.landing-main > div > div._3l6Cf > div");
      await qrElement.screenshot({path:"./whatsapp.jpg",type:"jpeg"});
      await browser.close();

       res.send(QRCode.toString(dataref,{type:"png"},function(err,url){
         console.log(url)

       }))

    })()

  }))

以上2种方法不起作用。但是,当我使用 chrome 检查元素手动获取 data-ref attr 的值并粘贴 https://www.the-qrcode-generator.com/ 并将该值生成为 qrcode 并使用移动 Whatsapp qr 扫描仪进行扫描时, Whatsapp 能够授权我,没有任何错误。这怎么可能 ?我正在尝试使用邮递员做完全相同的事情。

让我知道我在这里缺少什么。

Postman screen capture

node.js express puppeteer qr-code whatsapp
1个回答
0
投票

使用我们的库whatsapp-web.js发送您的消息。它直接注入 JavaScript 源代码,因此它比您尝试做的事情(与元素交互)更可靠,因为它们会在更新时更改类名称。

© www.soinside.com 2019 - 2024. All rights reserved.