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我也遇到这个问题。朋友的号从来没用过这个接口登录,上来就给封了
频繁的登录测试和发消息, 大概率会被封号.
我的也被封了,同样是最近没有操作,几天登录一次。
我注册的新号一调接口就被封了