diff --git a/package.json b/package.json index 173fc15..9bc613f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wechaty-puppet-wechat", - "version": "0.27.0", + "version": "0.27.1", "description": "Puppet WeChat for Wechaty", "main": "dist/src/mod.js", "typings": "dist/src/mod.d.ts", diff --git a/src/bridge.ts b/src/bridge.ts index 3086db2..2607e3c 100644 --- a/src/bridge.ts +++ b/src/bridge.ts @@ -132,10 +132,6 @@ export class Bridge extends EventEmitter { launchOptions.executablePath = this.options.endpoint } - const extensionOptionsArgs = [ - ...this.getWeChromeExtensionOptionsArgs(), - ] - const options = { ...launchOptions, args: [ @@ -149,7 +145,6 @@ export class Bridge extends EventEmitter { '--mute-audio', '--no-sandbox', ...launchOptionsArgs, - ...extensionOptionsArgs, ], headless, } @@ -230,6 +225,12 @@ export class Bridge extends EventEmitter { // might be called before initPage() return. const page = this.page = await browser.newPage() + /** + * Can we support UOS with puppeteer? #127 + * https://github.com/wechaty/wechaty-puppet-wechat/issues/127 + */ + await this.uosPatch(page) + page.on('error', e => this.emit('error', e)) page.on('dialog', this.onDialog.bind(this)) @@ -268,36 +269,26 @@ export class Bridge extends EventEmitter { const UOS_PATCH_CLIENT_VERSION = '2.0.0' const UOS_PATCH_EXTSPAM = 'Gp8ICJkIEpkICggwMDAwMDAwMRAGGoAI1GiJSIpeO1RZTq9QBKsRbPJdi84ropi16EYI10WB6g74sGmRwSNXjPQnYUKYotKkvLGpshucCaeWZMOylnc6o2AgDX9grhQQx7fm2DJRTyuNhUlwmEoWhjoG3F0ySAWUsEbH3bJMsEBwoB//0qmFJob74ffdaslqL+IrSy7LJ76/G5TkvNC+J0VQkpH1u3iJJs0uUYyLDzdBIQ6Ogd8LDQ3VKnJLm4g/uDLe+G7zzzkOPzCjXL+70naaQ9medzqmh+/SmaQ6uFWLDQLcRln++wBwoEibNpG4uOJvqXy+ql50DjlNchSuqLmeadFoo9/mDT0q3G7o/80P15ostktjb7h9bfNc+nZVSnUEJXbCjTeqS5UYuxn+HTS5nZsPVxJA2O5GdKCYK4x8lTTKShRstqPfbQpplfllx2fwXcSljuYi3YipPyS3GCAqf5A7aYYwJ7AvGqUiR2SsVQ9Nbp8MGHET1GxhifC692APj6SJxZD3i1drSYZPMMsS9rKAJTGz2FEupohtpf2tgXm6c16nDk/cw+C7K7me5j5PLHv55DFCS84b06AytZPdkFZLj7FHOkcFGJXitHkX5cgww7vuf6F3p0yM/W73SoXTx6GX4G6Hg2rYx3O/9VU2Uq8lvURB4qIbD9XQpzmyiFMaytMnqxcZJcoXCtfkTJ6pI7a92JpRUvdSitg967VUDUAQnCXCM/m0snRkR9LtoXAO1FUGpwlp1EfIdCZFPKNnXMeqev0j9W9ZrkEs9ZWcUEexSj5z+dKYQBhIICviYUQHVqBTZSNy22PlUIeDeIs11j7q4t8rD8LPvzAKWVqXE+5lS1JPZkjg4y5hfX1Dod3t96clFfwsvDP6xBSe1NBcoKbkyGxYK0UvPGtKQEE0Se2zAymYDv41klYE9s+rxp8e94/H8XhrL9oGm8KWb2RmYnAE7ry9gd6e8ZuBRIsISlJAE/e8y8xFmP031S6Lnaet6YXPsFpuFsdQs535IjcFd75hh6DNMBYhSfjv456cvhsb99+fRw/KVZLC3yzNSCbLSyo9d9BI45Plma6V8akURQA/qsaAzU0VyTIqZJkPDTzhuCl92vD2AD/QOhx6iwRSVPAxcRFZcWjgc2wCKh+uCYkTVbNQpB9B90YlNmI3fWTuUOUjwOzQRxJZj11NsimjOJ50qQwTTFj6qQvQ1a/I+MkTx5UO+yNHl718JWcR3AXGmv/aa9rD1eNP8ioTGlOZwPgmr2sor2iBpKTOrB83QgZXP+xRYkb4zVC+LoAXEoIa1+zArywlgREer7DLePukkU6wHTkuSaF+ge5Of1bXuU4i938WJHj0t3D8uQxkJvoFi/EYN/7u2P1zGRLV4dHVUsZMGCCtnO6BBigFMAA=' - const extraHeaders = { + const uosHeaders = { 'client-version' : UOS_PATCH_CLIENT_VERSION, extspam : UOS_PATCH_EXTSPAM, - referer : 'https://wx.qq.com/?&lang=zh_CN&target=t', } - await page.setExtraHTTPHeaders(extraHeaders) - } - - private getWeChromeExtensionOptionsArgs (): string[] { - /** - * Issue #127: Can we support UOS with puppeteer? - * https://github.com/wechaty/wechaty-puppet-wechat/issues/127 - * https://github.com/adamyi/wechrome - Chrome extension to unblock web wechat - * https://stackoverflow.com/a/51434261/1123955 - */ - const weChromeExt = path.join( - __dirname, - '..', - 'wechrome' - ) - if (!fs.existsSync(weChromeExt)) { - throw new Error('WeChrome extension not found.') - } - - const extensionOptionsArgs = [ - `--load-extension=${weChromeExt}`, - `--disable-extensions-except=${weChromeExt}`, - ] - - return extensionOptionsArgs + // add RequestInterception + await page.setRequestInterception(true) + page.on('request', async req => { + const url = new URL(req.url()) + if (url.pathname === '/cgi-bin/mmwebwx-bin/webwxnewloginpage') { + const override = { + headers: { + ...req.headers(), + ...uosHeaders, + }, + } + await req.continue(override) + return + } + await req.continue() + }) } public async readyAngular (page: Page): Promise { @@ -1050,7 +1041,10 @@ export class Bridge extends EventEmitter { public entryUrl (cookieList?: Protocol.Network.Cookie[]): string { log.verbose('PuppetWeChatBridge', 'cookieDomain(%s)', cookieList) - const DEFAULT_URL = 'https://wx.qq.com' + /** + * `?target=t` is from https://github.com/wechaty/wechaty-puppet-wechat/pull/129 + */ + const DEFAULT_URL = 'https://wx.qq.com?target=t' if (!cookieList || cookieList.length === 0) { log.silly('PuppetWeChatBridge', 'cookieDomain() no cookie, return default %s', DEFAULT_URL)