资讯专栏INFORMATION COLUMN

Python 模拟京东登录

894974231 / 1972人阅读

摘要:实现根据上面的分析我们只需要通过代码发送一个请求,并且带上相对应的参数就可以实现登录了。请输入验证码登录功能正在赶来的路上,敬请期待。。。加入购物车成功请输入京东账号请输入京东密码登录成功登录失败项目地址模拟京东登录吐槽群

Python模拟京东登录 分析登录的网络请求

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

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

uuid:6a9ffffda4-1819-4819-a888-b59301f83a59
ReturnUrl:https://item.jd.com/5089239.html
r: 0.2520828231526894
version: 2015

另一个是Form Data

uuid:6a9ffffda4-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,但是,Pythonrequests库给我们提供了会话机制,也就是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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44476.html

相关文章

  • Python 爬虫之模拟登陆CSND

    摘要:它也会在同一个实例发出的所有请求之间保持,期间使用的功能。而主要是方便解析源码,从中获取请求需要的一些参数完整代码请输入账号请输入密码项目地址模拟京东登录吐槽群 Python 爬虫之模拟登陆CSND 工具 基本的脚本语言是Python,虽然不敢说是最好的语言,至少是最好的之一(0.0),用模拟登陆,我们需要用到多个模块,如下: requests BeautifulSoup requ...

    firim 评论0 收藏0
  • 23个Python爬虫开源项目代码,包含微信、淘宝、豆瓣、知乎、微博等

    摘要:今天为大家整理了个爬虫项目。地址新浪微博爬虫主要爬取新浪微博用户的个人信息微博信息粉丝和关注。代码获取新浪微博进行登录,可通过多账号登录来防止新浪的反扒。涵盖链家爬虫一文的全部代码,包括链家模拟登录代码。支持微博知乎豆瓣。 showImg(https://segmentfault.com/img/remote/1460000018452185?w=1000&h=667); 今天为大家整...

    jlanglang 评论0 收藏0
  • Python 爬取CSDN的极客头条

    摘要:爬取的极客头条工具分析使用浏览器调试面板分析网页结构以及网络请求,容易知道,每一个头条信息结构如图所示因此,我们可以通过定位元素,同时,根据面板的网络请求分析,第一次加载更多数据的请求为第二次的为上述请求已精简,删除了原有请求的部分参数 Python 爬取CSDN的极客头条 工具 Python Python:requests Python:BeautifulSoup 分析 使用浏览...

    CatalpaFlat 评论0 收藏0
  • 趁着双11,写个京东商品自动下单

    摘要:项目地址求个在现在,商家一年不卖货,双卖出一年的货是大家都知道的事实了,总得来说调一调蚊子腿的价格,聊胜于无,但是也会有些神价格会出现,这时候买到就是赚到本来是想趁着双组台电脑,买个的板套装,没想到京东的一直是无货的状态,这几天有货了,价格 项目地址 求个 star 在现在,商家一年不卖货,双11卖出一年的货是大家都知道的事实了,总得来说调一调蚊子腿的价格,聊胜于无,但是也会有些神价格...

    Labradors 评论0 收藏0
  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0

发表评论

0条评论

894974231

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<