Node.js 使用Puppeter和express js发送自动whatsapp消息

Node.js 使用Puppeter和express js发送自动whatsapp消息,node.js,express,puppeteer,qr-code,whatsapp,Node.js,Express,Puppeteer,Qr Code,Whatsapp,我正在尝试使用express server中的Puppeter库将whatsapp消息发送给我的联系人之一。要发送信息,我必须通过web.whatsapp.com二维码授权我的whatsapp 使用Puppeter,我试图截取whatsapp web qrcode的屏幕截图,并在我的express服务器中作为HTTP GET请求的响应发送。但是当我尝试扫描qrcode时,我得到了一个错误,如“无法扫描代码。请确保您在whatsapp网站上,然后重试”。以下代码相同 app.get("/

我正在尝试使用express server中的Puppeter库将whatsapp消息发送给我的联系人之一。要发送信息,我必须通过web.whatsapp.com二维码授权我的whatsapp

使用Puppeter,我试图截取whatsapp web qrcode的屏幕截图,并在我的express服务器中作为HTTP GET请求的响应发送。但是当我尝试扫描qrcode时,我得到了一个错误,如“无法扫描代码。请确保您在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});        

    })()

  }))
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)

       }))

    })()

  }))
作为一种解决方法,使用Puppeter,我能够访问包含二维码div的div,在该div中,我获取数据ref属性的值,并使用qrcode npm模块将该值转换为二维码,我将该模块作为对express server中我的GET HTTP req的响应发送。如果我尝试扫描二维码,whatsapp会显示相同的错误“无法扫描二维码。请确保您是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});        

    })()

  }))
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)

       }))

    })()

  }))
以上两种方法都不起作用。但是,当我使用chrome inspect元素手动获取数据ref attr的值,然后粘贴并生成值作为qrcode,并使用移动whatsapp qr扫描仪进行扫描时,whatsapp能够无任何错误地授权我。这怎么可能?我正试图用邮递员做同样的事情

让我知道我错过了什么


尝试查看开源项目(或者实际上您可以使用它,而不是重新创建所有内容)