大神们帮我看看 Python requests 模拟登陆 taobao 的问题

2016-04-16 11:40:37 +08:00
 kukuwhu
我想通过 Python requests 库实现登录 taobao 功能,我想到的办法是通过手机扫描二维码来实现登陆,通过浏览器实验步骤如下:
1. 通过浏览器访问 https://qrlogin.taobao.com/qrcodelogin/generateQRCode4Login.do 获取二维码的 url 及 lgToken ,会返回格式如下的 json :
{"success":true,"message":"null","url":"//img.alicdn.com/tfscom/TB19qseMpXXXXbpXpXXwu0bFXXX.png","lgToken":"975c53795adb7a246ee2469dcb026006","adToken":"85573711dd80cde2d1c5ef98cb36c494"}
2. 在浏览器打开二维码的 url ,用手机淘宝扫描点击登陆,动作不要太慢,如果显示过期需要重新执行第 1 步。
3. 将以下链接的 lgToken 替换成第 1 步骤的 lgToken,访问后得到一个 json 文件
https://qrlogin.taobao.com/qrcodelogin/qrcodeLoginCheck.do?lgToken=975c53795adb7a246ee2469dcb026006&defaulturl=https%3A%2F%2Fwww.taobao.com%2F&_ksTS=1460659151617_231
4. 访问第 3 步 json 文件里的 url ,即可完成登录认证并进入主页。
第 3 步正确返回的 json 内容形式如下:
{"code":"10006","success":true,"url":"https://login.taobao.com/member/loginByIm.do?uid=cntaobaoTest_kuku_id&token=826ebe55a3f0f6af7d635ae87afd16bb&time=1460736674705&asker=qrcodelogin&ask_version=1.0.0&defaulturl=https%3A%2F%2Fwww.taobao.com%2F&webpas=2d741eb256deaa2b9f5dbdd7645758ae1435179353"}
上述步骤在 chrome 下清除 cookies 后,手动依次执行可顺利完成认证,但我通过 Python 代码却最终无法完成登录。

代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import time
import sys
import json
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36'}

sess = requests.session()
sess.headers = headers
#对应第 1 步
rsp = sess.get("https://qrlogin.taobao.com/qrcodelogin/generateQRCode4Login.do")
b = json.loads(rsp.text)
#对应第 2 步,将以下打印的二维码 url 贴到浏览器,用手机淘宝扫描
print(b['url'])
print(b['lgToken'])
time.sleep(30)
#对应第 3 步
url = "https://qrlogin.taobao.com/qrcodelogin/qrcodeLoginCheck.do?lgToken=" + b['lgToken']
url += "&defaulturl=https%3A%2F%2Fwww.taobao.com%2F&_ksTS=1460659151617_231"
rsp = sess.get(url)
b = json.loads(rsp.text)
print(b['url'])
#对应第 4 步
rsp = sess.get(b['url'])
#日志文件里可看出没登录成功,仍是一个登录页面
fle = open("log.html", 'w')
fle.write(rsp.text)
fle.close()
4671 次点击
所在节点    Python
6 条回复
casparchen
2016-04-16 14:24:56 +08:00
改一下 UA 试试呢
casparchen
2016-04-16 14:25:29 +08:00
@casparchen 不好意思没看到
matthewgao
2016-04-16 14:35:28 +08:00
有检查 response header 里面有没有 session 或者 cookie 相关的信息?对比下有其他缺失的不
caspartse
2016-04-16 16:01:44 +08:00
实际上已经登录成功了。

print(sess.cookies.get_dict().get('lgc'))
print(sess.cookies.get_dict().get('_nk_'))

微信的扫码登录原理和这个类似。
kukuwhu
2016-04-16 16:08:01 +08:00
@caspartse 那为何我在 log.html 里看不到我的个人信息,比如昵称之类的?
caspartse
2016-04-16 16:12:04 +08:00
@kukuwhu 个人信息显示是通过 js 实现的,不在结果返回结果里。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/271518

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX