python模拟账号密码登录_Python 模拟京东登录

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# JD_AutoBuy ## 京东抢购 Python爬虫,自动登录京东网站,查询商品库存,价格,显示购物车详情等。 可以指定抢购商品,自动购买下单,然后手动去京东付款就行。 ## chang log + 2017-03-30 实现二维码扫码登陆 ## 运行环境 Python 2.7 ## 第三方库 - [Requests][1]: 简单好用,功能强大的Http请求库 - [beautifulsoup4][2]: HTML文档格式化及便签选择器 ## 环境配置 ``` Python pip install requests pip install beautifulsoup4 ``` ## 使用帮助 ``` cmd > python scraper-jd.py -h usage: scraper-jd.py [-h] [-u USERNAME] [-p PASSWORD] [-g GOOD] [-c COUNT] [-w WAIT] [-f] [-s] Simulate to login Jing Dong, and buy sepecified good optional arguments: -h, --help show this help message and exit -u USERNAME, --username USERNAME Jing Dong login user name -p PASSWORD, --password PASSWORD Jing Dong login user password -g GOOD, --good GOOD Jing Dong good ID -c COUNT, --count COUNT The count to buy -w WAIT, --wait WAIT Flush time interval, unit MS -f, --flush Continue flash if good out of stock -s, --submit Submit the order to Jing Dong ``` ## 实例输出 ``` cmd +++++++++++++++++++++++++++++++++++++++++++++++++++++++ Thu Mar 30 17:10:01 2017 > 请打开京东手机客户端,准备扫码登陆: 201 : 二维码未扫描 ,请扫描二维码 201 : 二维码未扫描 ,请扫描二维码 201 : 二维码未扫描 ,请扫描二维码 201 : 二维码未扫描 ,请扫描二维码 202 : 请手机客户端确认登录 200 : BADACIFYhf6fakfHvjiYTlwGzSp4EjFATN3Xw1ePR1hITtw0 登陆成功 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ Thu Mar 30 17:10:28 2017 > 商品详情 编号:3133857 库存:现货 价格:6399.00 名称:Apple iPhone 7 Plus (A1661) 128G 黑色 移动联通电信4G手机 链接:http://cart.jd.com/gate.action?pid=3133857&pcount=1&ptype=1 商品已成功加入购物车! 购买数量:3133857 > 1 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ Thu Mar 30 17:10:30 2017 > 购物车明细 购买 数量 价格 总价 商品 Y 1 6399.00 6399.00 Apple iPhone 7 Plus (A1661) 128G 黑色 移动联通电信4G手机 总数: 1 总额: 6399.00 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ Thu Mar 30 17:10:30 2017 > 订单详情 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ ... ``` ## 注 代码仅供学习之用,京东网页不断变化,代
京东登录的滑动验证需要使用到Selenium和WebDriver,具体步骤如下: 1. 安装Selenium和WebDriver ``` pip install selenium ``` 2. 下载WebDriver 从https://npm.taobao.org/mirrors/chromedriver/下载与自己Chrome版本对应的WebDriver,解压后将exe文件所在路径添加到系统环境变量中。 3. 编写Python代码 ```python from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait # 启动Chrome浏览器 browser = webdriver.Chrome() # 打开京东登录页面 browser.get('https://passport.jd.com/new/login.aspx') # 等待页面加载完成 wait = WebDriverWait(browser, 10) wait.until(EC.presence_of_element_located((By.ID, 'loginname'))) # 输入账号和密码 browser.find_element_by_id('loginname').send_keys('your_username') browser.find_element_by_id('nloginpwd').send_keys('your_password') # 获取滑块元素 slider = wait.until(EC.presence_of_element_located((By.ID, 'JDJRV-wrap-loginsubmit'))) slider_knob = wait.until(EC.presence_of_element_located((By.ID, 'JDJRV-slide-innerJDJRV-slide-btn'))) # 模拟滑动 ActionChains(browser).click_and_hold(slider_knob).perform() ActionChains(browser).move_by_offset(300, 0).perform() ActionChains(browser).release().perform() # 等待登录成功 wait.until(EC.url_contains('https://home.jd.com/')) # 关闭浏览器 browser.quit() ``` 以上代码实现了京东登录模拟了滑块验证。其中,等待页面加载完成和等待登录成功的逻辑使用了WebDriverWait和ExpectedConditions模块,确保了代码的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值