我想通过 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()