diff --git a/src/puppet-web/bridge.spec.ts b/src/puppet-web/bridge.spec.ts index c37663d7472ed979f5c1177015338e674a9e1124..cc3e2a5817e4ed3213fe0a637a703b0f04e04b30 100755 --- a/src/puppet-web/bridge.spec.ts +++ b/src/puppet-web/bridge.spec.ts @@ -43,7 +43,40 @@ test('PuppetWebBridge', async t => { } }) +test('preHtmlToXml()', async t => { + const BLOCKED_HTML_ZH = [ + '
',
+      '<error>',
+        '<ret>1203</ret>',
+        '<message>当前登录环境异常。为了你的帐号安全,暂时不能登录web微信。你可以通过Windows微信、Mac微信或者手机客户端微信登录。</message>',
+      '</error>',
+    '
', + ].join('') + + const BLOCKED_XML_ZH = [ + '', + '1203', + '当前登录环境异常。为了你的帐号安全,暂时不能登录web微信。你可以通过Windows微信、Mac微信或者手机客户端微信登录。', + '', + ].join('') + + const profile = new Profile() + const bridge = new Bridge({ profile }) + + const xml = bridge.preHtmlToXml(BLOCKED_HTML_ZH) + t.equal(xml, BLOCKED_XML_ZH, 'should parse html to xml') +}) + test('testBlockedMessage()', async t => { + const BLOCKED_HTML_ZH = [ + '
',
+      '<error>',
+        '<ret>1203</ret>',
+        '<message>当前登录环境异常。为了你的帐号安全,暂时不能登录web微信。你可以通过手机客户端或者windows微信登录。</message>',
+      '</error>',
+    '
', + ].join('') + const BLOCKED_XML_ZH = ` 1203 @@ -74,6 +107,14 @@ test('testBlockedMessage()', async t => { t.equal(msg, false, 'should return false when no block message') }) + test('html', async t => { + const profile = new Profile() + const bridge = new Bridge({ profile }) + + const msg = await bridge.testBlockedMessage(BLOCKED_HTML_ZH) + t.equal(msg, BLOCKED_TEXT_ZH, 'should get zh blocked message') + }) + test('zh', async t => { const profile = new Profile() const bridge = new Bridge({ profile }) diff --git a/src/puppet-web/bridge.ts b/src/puppet-web/bridge.ts index 66fb1f2a0abd17d1062e53fd3c64c5d8c5b85590..dca8dd53bfcb065aad91c87bf8d173b3dcea510e 100644 --- a/src/puppet-web/bridge.ts +++ b/src/puppet-web/bridge.ts @@ -36,7 +36,7 @@ const retryPromise = require('retry-promise').default import { log } from '../config' import Profile from '../profile' - +import Misc from '../misc' import { MediaData, MsgRawObj, @@ -81,8 +81,21 @@ export class Bridge extends EventEmitter { this.state.on(true) log.verbose('PuppetWebBridge', 'init() initPage() done') } catch (e) { - this.state.off(true) log.error('PuppetWebBridge', 'init() exception: %s', e) + this.state.off(true) + + try { + if (this.page) { + await this.page.close() + } + if (this.browser) { + await this.browser.close() + } + } catch (e2) { + log.error('PuppetWebBridge', 'init() exception %s, close page/browser exception %s', e, e2) + } + + this.emit('error', e) throw e } } @@ -123,7 +136,6 @@ export class Bridge extends EventEmitter { } catch (e) { log.error('PuppetWebBridge', 'init() dialog.dismiss() reject: %s', e) } - this.emit('error', new Error(`${dialog.type}(${dialog.message()})`)) } @@ -151,7 +163,6 @@ export class Bridge extends EventEmitter { return resolve() } catch (e) { log.error('PuppetWebBridge', 'init() initPage() onLoad() exception: %s', e) - this.emit('error', e) return reject(e) } } @@ -185,6 +196,8 @@ export class Bridge extends EventEmitter { const TIMEOUT = 10 * 1000 await new Promise(async (resolve, reject) => { const timer = setTimeout(async () => { + log.verbose('PuppetWebBridge', 'readyAngular() timeout') + const text = await this.evaluate(() => { return document.body.innerHTML }) as any as string // BUG of Puppet Type Definition @@ -192,9 +205,7 @@ export class Bridge extends EventEmitter { const blockedMessage = await this.testBlockedMessage(text) if (blockedMessage) { // Wechat Account Blocked - log.error('PuppetWeb', 'initBridge() Wechat Account Blocked for using Web: %s', blockedMessage) const err = new Error(blockedMessage) - this.emit('error', err) return reject(err) } @@ -657,6 +668,17 @@ export class Bridge extends EventEmitter { } } + public preHtmlToXml(text: string): string { + log.verbose('PuppetWebBridge', 'preHtmlToXml()') + + const preRegex = /^]*>([^<]+)<\/pre>$/i + const matches = text.match(preRegex) + if (!matches) { + return text + } + return Misc.unescapeHtml(matches[1]) + } + /** * Throw if there's a blocked message */ @@ -665,6 +687,9 @@ export class Bridge extends EventEmitter { log.verbose('PuppetWebBridge', 'testBlockedMessage(%s)', textSnip) + // see unit test for detail + text = this.preHtmlToXml(text) + interface BlockedMessage { error?: { ret : number, @@ -688,6 +713,8 @@ export class Bridge extends EventEmitter { const ret = +obj.error.ret const message = obj.error.message + log.warn('PuppetWebBridge', 'testBlockedMessage() error.ret=%s', ret) + if (ret === 1203) { // // 1203 @@ -695,7 +722,6 @@ export class Bridge extends EventEmitter { // return resolve(message) } - log.warn('PuppetWebBridge', 'testBlockedMessage() code: %s type: %s', ret, typeof ret) return resolve(message) // other error message }) })