From bea1ebf48035f52b71b145214eac0dfd6576b113 Mon Sep 17 00:00:00 2001 From: Pedro Lopez Date: Wed, 4 Dec 2019 02:58:55 -0400 Subject: [PATCH] [FIX] Get QR code directly from canvas element (fix #26) --- package-lock.json | 5 +++++ package.json | 1 + src/Client.js | 13 ++++++------- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 61c82fc..a56918e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -168,6 +168,11 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, + "jsqr": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/jsqr/-/jsqr-1.2.0.tgz", + "integrity": "sha512-wKcQS9QC2VHGk7aphWCp1RrFyC0CM6fMgC5prZZ2KV/Lk6OKNoCod9IR6bao+yx3KPY0gZFC5dc+h+KFzCI0Wg==" + }, "mime": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", diff --git a/package.json b/package.json index 0b403d7..78d669a 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ }, "homepage": "https://github.com/pedroslopez/whatsapp-web.js#readme", "dependencies": { + "jsqr": "^1.2.0", "moduleraid": "git+https://github.com/pixeldesu/moduleRaid.git", "puppeteer": "^1.20.0" } diff --git a/src/Client.js b/src/Client.js index ea223a8..175e440 100644 --- a/src/Client.js +++ b/src/Client.js @@ -3,12 +3,12 @@ const EventEmitter = require('events'); const puppeteer = require('puppeteer'); const moduleRaid = require('moduleraid/moduleraid'); +const jsQR = require('jsqr'); const Util = require('./util/Util'); const { WhatsWebURL, UserAgent, DefaultOptions, Events, WAState } = require('./util/Constants'); const { ExposeStore, LoadUtils } = require('./util/Injected'); const ChatFactory = require('./factories/ChatFactory'); -const Chat = require('./structures/Chat'); const Message = require('./structures/Message'); /** @@ -65,12 +65,11 @@ class Client extends EventEmitter { } else { // Wait for QR Code - const QR_CONTAINER_SELECTOR = '._2d3Jz'; - const QR_VALUE_SELECTOR = '._1pw2F'; - - await page.waitForSelector(QR_CONTAINER_SELECTOR); - - const qr = await page.$eval(QR_VALUE_SELECTOR, node => node.getAttribute('data-ref')); + const QR_CANVAS_SELECTOR = 'canvas'; + await page.waitForSelector(QR_CANVAS_SELECTOR); + const qrImgData = await page.$eval(QR_CANVAS_SELECTOR, canvas => [].slice.call(canvas.getContext('2d').getImageData(0,0,264,264).data)); + const qr = jsQR(qrImgData, 264, 264).data; + this.emit(Events.QR_RECEIVED, qr); // Wait for code scan