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