我正在尝试使用 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 能够授权我,没有任何错误。这怎么可能 ?我正在尝试使用邮递员做完全相同的事情。
让我知道我在这里缺少什么。
使用我们的库whatsapp-web.js发送您的消息。它直接注入 JavaScript 源代码,因此它比您尝试做的事情(与元素交互)更可靠,因为它们会在更新时更改类名称。