littlecodersh/ItChat

KeyError: 'pass_ticket'(在components/login.py(213)show_mobile_login())-已查明是因为被封

pengyuwei opened this issue · 10 comments

在提交前,请确保您已经检查了以下内容!

  • [√] 您可以在浏览器中登陆微信账号,但不能使用itchat登陆
  • [√] 我已经阅读并按文档 中的指引进行了操作
  • [√] 您的问题没有在issues报告,否则请在原有issue下报告
  • [√] 本问题确实关于itchat, 而不是其他项目.
  • [√] 如果你的问题关于稳定性,建议尝试对网络稳定性要求极低的itchatmp项目

请使用itchat.run(debug=True)运行,并将输出粘贴在下面:

Traceback (most recent call last):
  File "wc.py", line 768, in <module>
    main()
  File "wc.py", line 729, in main
    itchat.auto_login(enableCmdQR=2)
  File "/home/user/.local/lib/python2.7/site-packages/itchat/components/register.py", line 36, in auto_login
    loginCallback=loginCallback, exitCallback=exitCallback)
  File "/home/user/.local/lib/python2.7/site-packages/itchat/components/login.py", line 67, in login
    self.show_mobile_login()
  File "/home/user/.local/lib/python2.7/site-packages/itchat/components/login.py", line 213, in show_mobile_login
    self.loginInfo['url'], self.loginInfo['pass_ticket'])
KeyError: 'pass_ticket'

您的itchat版本为:1.3.7。(可通过python -c "import itchat;print(itchat.__version__)"获取)

其他的内容或者问题更详细的描述都可以添加在下面:

今天itchat做的机器人忽然不能登录了,提示loginInfo的keyerror,反复可重现,调试过程如下:

itchat      : INFO     Please press confirm on your phone.
Loading the contact, this may take a little while.
itchat      : INFO     Loading the contact, this may take a little while.
> /home/leuser/.local/lib/python2.7/site-packages/itchat/components/login.py(213)show_mobile_login()
-> self.loginInfo['url'], self.loginInfo['pass_ticket'])
(Pdb) self.loginInfo['pass_ticket']
*** KeyError: 'pass_ticket'
(Pdb) print self.loginInfo['pass_ticket']
*** KeyError: 'pass_ticket'
(Pdb) print self.loginInfo.has_key('pass_ticket')
False
(Pdb) self.loginInfo
{'SyncKey': {u'Count': 0, u'List': []}, 'syncUrl': 'https://webpush.wx2.qq.com/cgi-bin/mmwebwx-bin', 'synckey': '', 'url': u'https://wx2.qq.com/cgi-bin/mmwebwx-bin', 'InviteStartCount': 0, 'deviceid': 'e893162211629630', 'fileUrl': 'https://file.wx2.qq.com/cgi-bin/mmwebwx-bin', 'BaseRequest': {}, 'User': <User: {'UserName': u'', 'City': '', 'DisplayName': '', 'UniFriend': 0, 'OwnerUin': 0, 'MemberList': <ContactList: []>, 'PYQuanPin': u'', 'RemarkPYInitial': u'', 'Uin': 0, 'AppAccountFlag': 0, 'VerifyFlag': 0, 'Province': '', 'KeyWord': '', 'RemarkName': u'', 'PYInitial': u'', 'ChatRoomId': 0, 'HideInputBarFlag': 0, u'HeadImgFlag': 0, 'EncryChatRoomId': '', 'AttrStatus': 0, 'SnsFlag': 0, 'MemberCount': 0, u'WebWxPluginSwitch': 0, 'Alias': '', 'Signature': u'', 'ContactFlag': 0, 'NickName': u'', 'RemarkPYQuanPin': u'', 'HeadImgUrl': u'', 'Sex': 0, 'StarFriend': 0, 'Statues': 0}>}
(Pdb) n
KeyError: ('pass_ticket',)
> /home/leuser/.local/lib/python2.7/site-packages/itchat/components/login.py(213)show_mobile_login()
-> self.loginInfo['url'], self.loginInfo['pass_ticket'])
(Pdb) list
208             update_local_friends(self, otherList)
209         return dic
210  
211     def show_mobile_login(self):
212         url = '%s/webwxstatusnotify?lang=zh_CN&pass_ticket=%s' % (
213 B->         self.loginInfo['url'], self.loginInfo['pass_ticket'])
214         data = {
215             'BaseRequest'  : self.loginInfo['BaseRequest'],
216             'Code'         : 3,
217             'FromUserName' : self.storageClass.userName,
218             'ToUserName'   : self.storageClass.userName,

可见,loginInfo中的pass_ticket字段现在不见了。
如果强行跳过,则会得到如下错误

Traceback (most recent call last):
  File "wcrobot.py", line 768, in <module>
    main()
  File "wcrobot.py", line 729, in main
    itchat.auto_login(enableCmdQR=2)
  File "/home/leuser/.local/lib/python2.7/site-packages/itchat/components/register.py", line 36, in auto_login
    loginCallback=loginCallback, exitCallback=exitCallback)
  File "/home/leuser/.local/lib/python2.7/site-packages/itchat/components/login.py", line 68, in login
    self.get_contact(True)
  File "/home/leuser/.local/lib/python2.7/site-packages/itchat/components/contact.py", line 285, in get_contact
    seq, batchMemberList = _get_contact(seq)
  File "/home/leuser/.local/lib/python2.7/site-packages/itchat/components/contact.py", line 270, in _get_contact
    int(time.time()), seq, self.loginInfo['skey'])
KeyError: 'skey'

登录也无法成功。今天上午11点左右开始出现此问题的,不知道是否是微信通信协议更新导致?

我也遇到了

经查,pass_ticket在赋值位于itchat/components/login.py +137
process_login_info()函数中对登录信息的处理
core.loginInfo['pass_ticket'] = core.loginInfo['BaseRequest']['DeviceID'] = node.childNodes[0].data

登录信息来自于以下请求的返回值:
请求地址:
'https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login'
参数
u'loginicon=true&uuid=obehqnYSeg==&tip=0&r=948990&_=1498455443'
请求头:
{'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'}

相关变量

(Pdb) p fileUrl
'https://file.wx2.qq.com/cgi-bin/mmwebwx-bin'
(Pdb) p syncUrl
'https://webpush.wx2.qq.com/cgi-bin/mmwebwx-bin'
(Pdb) p core.loginInfo['deviceid']
'e880319391974551'
window.code=200;
window.redirect_uri="https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=A6GtiViCyNCxhka5aZTtUaTH@qrticket_0&uuid=obehqnYSeg==&lang=zh_CN&scan=1498455585";

直接访问redirecturi,得到:

<error><ret>1203</ret><message>当前登录环境异常。为了你的帐号安全,暂时不能登录web微信。你可以通过手机客户端或者windows微信登录。</message></error>

直接去https://wx2.qq.com/ 扫码登录,得到上面一样的提示。

看来问题原因是账号的web登录被微信封了。
触发了微信的哪条判断规则,不得而知,最近的重登录次数并没有明显的变化,大约每天登录一次,调试的时候会登录多次,但并不是很频繁。

@pengyuwei 我后来发现是被封号。但不知何时解封。╮(╯▽╰)╭

HTTPSConnectionPool(host='file.wx8.qq.com', port=443): Max retries exceeded with url: /cgi-bin/mmwebwx-bin/webwxuploadmedia?f=json (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x0000025AA982F5C0>: Failed to establish a new connection: [Errno 10061] [WinError 10061] 由于目标计算机积极拒绝,无法连接。',))

部分账号上传图片会报这个错,但是没有出现 pass_ticket 错误,很奇怪

我的账户也被封杀了,同志们建议使用小号哈

被封杀了还有机会拯救回来吗?现在 web版不能搞了

woy我也遇到这个问题。朋友的号从来没用过这个接口登录,上来就给封了

频繁的登录测试和发消息, 大概率会被封号.

我的也被封了,同样是最近没有操作,几天登录一次。

我注册的新号一调接口就被封了