Python模拟京东登录

分析登录的网络请求

打开https://passport.jd.com/new/login.aspx,打开浏览器的调试面板,然后,输入账号密码 =>> 登录,然后看调试面板上面的Network捕捉到的网络请求,如下图:

根据上面的图片,我们可以知道,在我们点击完登录按钮之后,浏览器发送了一个POST请求到https://passport.jd.com/uc/loginService,然后在请求头上面带上了一些基本的参数,最重要的有三个,一个是cookie,一个是Referer,还有一个是User-Agent。不要问我为何重要,我只是知道登录需要带上-_-||

然后,再看看请求所需要的参数,这里面有两部分,一个是Query Params:

uuid:6a9ddda4-1819-4819-a888-b59301f83a59

ReturnUrl:https://item.jd.com/5089239.html

r: 0.2520828231526894

version: 2015

另一个是Form Data:

uuid:6a9ddda4-1819-4819-a888-b59301f83a59

eid:F37T4YRBOPZZ6JSEGDA7WH2VCIETQY…J23JGCTD3IM4TMK44Y5ATOTO6G4SM

fp:87783198d64a9aa25b3f0b28b152b094

_t:_t

loginType:f

loginname:test@qq.com

nloginpwd:P+TbkVGbhhhC4DFlZ7y4az8j/Y1QYw…h0qs8+bKp7UbHeGWF1KEMrQUG5po=

chkRememberMe:

authcode:

pubKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNAD…woanQq+CA6agNkqly2H4j6wIDAQAB

sa_token: B68C442BE645754F33277E70120805…8EF504D2CD67D7341B8BFBA47FFA5

上面的参数里面,基本可以在页面上面可以找到

其中:ReturnUrl是登录成功后返回的页面,authcode是图片验证码,本例子上面不需要输入验证码。

Python实现

根据上面的分析我们只需要通过代码发送一个post请求,并且带上相对应的参数就可以实现登录了。所有的参数,我们都可以轻而易举地获取,唯一的困难是cookie,但是,Python的requests库给我们提供了会话机制,也就是requests.Session(),因此,具体的实现过程可以如代码所示

完整代码

# -*- coding: UTF-8 -*-

import json

import requests

import sys

from bs4 import BeautifulSoup

s = requests.Session()

class JD:

def __init__(self, username, password):

self.username = username

self.password = password

self.headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0',

'Referer': 'https://www.jd.com/'

}

def get_login_data(self):

url = 'https://passport.jd.com/new/login.aspx'

html = s.get(url, headers=self.headers).content

soup = BeautifulSoup(html, 'lxml')

display = soup.select('#o-authcode')[0].get('style')

auth_code = ''

if not display:

print('需要验证码。。。')

auth_code_url = soup.select('#JD_Verification1')[0].get('src2')

auth_code = self.get_auth_img(auth_code_url)

uuid = soup.select('#uuid')[0].get('value')

eid = soup.select('#eid')[0].get('value')

fp = soup.select('input[name="fp"]')[0].get('value') # session id

_t = soup.select('input[name="_t"]')[0].get('value') # token

login_type = soup.select('input[name="loginType"]')[0].get('value')

pub_key = soup.select('input[name="pubKey"]')[0].get('value')

sa_token = soup.select('input[name="sa_token"]')[0].get('value')

data = {

'uuid': uuid,

'eid': eid,

'fp': fp,

'_t': _t,

'loginType': login_type,

'loginname': self.username,

'nloginpwd': self.password,

'chkRememberMe': True,

'authcode': '',

'pubKey': pub_key,

'sa_token': sa_token,

'authCode': auth_code

}

return data

def get_auth_img(self, url):

auth_code_url = 'http:' + url

auth_img = s.get(auth_code_url, headers=self.headers)

with open(sys.path[0] + '/auth.jpg', 'wb') as f:

f.write(auth_img.content)

code = input('请输入验证码:')

return code

def login(self):

"""

登录

:return:

"""

url = 'https://passport.jd.com/uc/loginService'

data = self.get_login_data()

headers = {

'Referer': 'https://passport.jd.com/uc/login?ltype=logout',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0',

'X-Requested-With': 'XMLHttpRequest'

}

content = s.post(url, data=data, headers=headers).text

result = json.loads(content[1: -1])

return result

def rush(self):

print('功能正在赶来的路上,敬请期待。。。')

pass

def handle():

print("*************** 菜单列表 **************")

print('1、抢购')

print('2、加入购物车')

num = input('请输入功能编号:')

if num == '1':

print('抢购功能正在赶来的路上,敬请期待。。。')

else:

print('加入购物车功能正在赶来的路上,敬请期待。。。')

# print('加入购物车成功!!!')

pass

username = input('请输入京东账号:')

password = input('请输入京东密码:')

jd = JD(username, password)

result = jd.login()

if result.get('success'):

print('登录成功')

handle()

else:

print('登录失败')

吐槽QQ群: 173318043

python模拟账号密码登录_Python 模拟京东登录相关推荐

  1. python账号密码一一对应_python模拟用户登录系统,如何两个用户输入各自的密码才能登入?...

    展开全部 #我可以把我自己2113的成果送你,你来研究5261研究 import json #用来存储数据4102的模块 import os #用来进行文件操作1653 import sys #获取脚 ...

  2. spirngmvc如何实现直接输入网页重定向到登录_Python 模拟新浪微博登录

    点击上方"小猿学 Python",选择"置顶公众号" 作者:北岛知寒 链接:https://www.cnblogs.com/crazyacking/p/5232 ...

  3. python实现账号密码登录

    用Python实现账号密码登录 准备 无需数据库 程序简介 运行这个程序,注册后哪怕重新运行,注册的账号依然存在,我们可以把账号密码分别保存到2个txt中,使用的时候再读取txt 为了安全起见,我们可 ...

  4. python 验证码图片 模拟登录_Python 模拟生成动态产生验证码图片的方法

    模拟动态产生验证码图片 模拟生成验证码,首先要做的是生成随机的字母,然后对字母进行模糊处理.这里介绍一下 Python 提供的 Pillow 模块. Pillow PIL:Python Image L ...

  5. python模拟网页点击_python模拟点击

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python怎么模拟点击网页按钮前提环境:python3 和 visual st ...

  6. python验证账号密码登录

    python小程序:一段利用循环实现的验证账号密码登录的程序 init_usrname = input("请输入初始用户名:") init_password = input(&qu ...

  7. 用Python编写账号密码登录程序

    for i in range(3):name = int(input("请输入用户名:"))password = int(input("请输入密码:"))if ...

  8. python写一个自动登录脚本_Python 实现自动登录+点击+滑动验证功能

    需要用到的库有selenium,还需要安装Chrome浏览器驱动,具体如何安装我就不详述了 在这里我模拟了csdn的登录过程 ** 1**.首先打开网页,用户名+密码登录,然后定位用户名输入框,和密码 ...

  9. python 带账号密码的爬取

    某些网页需要输入账号密码才能进入到特定的页面,比如cdsn登陆之后才能进入自己的博客管理页面. 博客页面url:https://mp.csdn.net/postlist 登陆的方式有几种,如下具体描述 ...

  10. Python 生成账号密码算法

    有个需求,需要伪造跟用户行为非常类似的账号密码,而且需要一个阀值控制伪造的数量. 在这需求上,还有一个就是需要控制生成的比率.跳出率不能过高或者太低. 对此就随手用python写了一个,bug不知道有 ...

最新文章

  1. GStreamer 1.0 series序列示例
  2. 栈和队列的区别 | 每日趣闻
  3. MorGain2020中文版
  4. Java线程阻塞原语-LockSupport
  5. SAP 3D visual enterprise viewer 9.0 的下载方式
  6. Entity Framework 的一些性能建议
  7. Django学习笔记《一》初始化pycharm和mysql数据库及相关环境
  8. 《NET 产品版权保护方案》非常全面, 《武汉.NET俱乐部》, 培训讲议
  9. matlab三相系统电阻折算,基于MATLAB三相异步电动机调压调速系统方案.doc
  10. 小程序外包需要注意哪些事情(小程序外包开发流程)
  11. 不用U盘,给自己的电脑重装一个win10系统
  12. 点击电脑桌面图标就点计算机图标老是出现是否删除快捷方式,电脑桌面上的快捷方式图标总是有小箭头怎么删掉...
  13. Java验证身份证号
  14. 网页中滑动导航菜单制作
  15. VS或VC编译正常,但运行时出现Stack overflow
  16. DAX 第八篇:【翻译】数据沿袭(Data Lineage )
  17. 在SQLserver中如何获得两个日期相减的天数?
  18. mysql score表_MySQL连表查询练习题
  19. [浅析]UE4物理系统
  20. Scrum板与Kanban如何抉择?敏捷工具:ngoydm板与按照clwcbvam

热门文章

  1. 西普CTF训练(programe部分分析)
  2. 8-思科防火墙:Cisco ASA uRPF运用
  3. iWebShop 二次开发之商城后台模板渲染流程
  4. 51单片机驱动继电器模块点灯
  5. mysql字典_mysql常用字典表(完整版)
  6. BP神经网络的基本思想,bp神经网络原理简述
  7. origin三维散点图_Origin 9按类别绘制散点图的方法
  8. UCI数据库使用说明
  9. python 安装 pyHook
  10. 机器学习-分类-线性分类器