Python 自动签到_京东在哪签到领京豆

Python 自动签到_京东在哪签到领京豆今天带大家进行模拟京东登录,并进行签到获取京豆,1000个京豆=10元,毕竟「苍蝇也是肉」,每天用脚本可以获取大概n个京豆,是不是一个发现了一个「发家致富」的好路子?废话不多说,下面开始正题。整体流程如下:1模拟登录首先我们需要的就是模拟京东登录,只有登录了才能进行签到领京豆等操作。模拟登录其实就是通过HTTP的POST请求讲用户的登录信息发送给服务器进行认证的过程。1.1…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

今天带大家进行模拟京东登录,并进行签到获取京豆,1000 个京豆 = 10 元,毕竟「苍蝇也是肉」,每天用脚本可以获取大概 n 个京豆,是不是一个发现了一个「发家致富」的好路子?

废话不多说,下面开始正题。

整体流程如下:

201806261445.png

1 模拟登录

首先我们需要的就是模拟京东登录,只有登录了才能进行签到领京豆等操作。模拟登录其实就是通过 HTTP 的 POST 请求讲用户的登录信息发送给服务器进行认证的过程。

1.1 登录数据分析

登录过程表面上看着挺简单,我们只要在浏览器里输入用户名、密码,有时还需要输入一些连开发者都分辨不出的验证码。其实背后是浏览器帮忙做了很多工作(浏览器表示挺累的),因此我们要模拟登录,就要搞清楚浏览器在背后做了什么。

1529828898141.jpg

同样的套路,进入到京东的登录页面:https://passport.jd.com/uc/login?ltype=logout,按下 F12,页面输入登录信息后,点击登录(可以尝试输入一个错误的密码,因为登录后页面直接跳转到了主页面,看不到我们要的数据了),可以看到一个 POST 请求:

1529828527788.jpg

这里可以看到,浏览器发送了一个 POST 请求到 https://passport.jd.com/uc/loginService,然后在请求头上面带上了一些基本的参数,其中有一个 FormData,这里就是浏览器向服务器提交的表单信息。

看上去是不是一脸蒙蔽了,其实,这些信息大部分是可以在登录页面的源代码里找到的,源码中有一个 id 为 formlogin 的表单,其内容有:

1

2

3

4

5

6

7

8

9

10

11

可以看到一批 hidden,其实这些都是浏览器后台「偷偷」传给服务器的参数,只不过它们是被隐藏了的,前端页面不可见而已。可以用 BeautifulSoup 获取这些登录信息:

1

2

3

4

5

6

7sa_token = soup.find(id=’sa_token’)[‘value’]

uuid = soup.find(id=’uuid’)[‘value’]

loginType = soup.find(id=’loginType’)[‘value’]

pubKey = soup.find(id=’pubKey’)[‘value’]

_t = soup.find(id=’token’)[‘value’]

fp = soup.find(id=’sessionId’)[‘value’]

eid = soup.find(id=’eid’)[‘value’]

1.2 验证码的处理

普通登陆的情况下验证码 authcode 只要为空即可,但是若京东认为有安全风险问题时,会出现验证码,那这个验证码如何处理呢?

目前验证码处理仍然是一个比较困难的问题,处理方法一般可以分为自动识别和手动识别。

手动处理:就是通过验证码链接将验证码图片下载到本地,然后手动敲入完成信息录入。

自动识别:指使用一些高级的算法技术来完成的,如 OCR 文字识别,机器学习进行识别训练等。一般免费的文字识别算法识别率并不高,收费的识别效率还是可以接受的。

本文就采用手动录入验证码的方式。

首先,如何判断页面是否需要输入验证码?

1529922041245.jpg

其返回值是:

1({“verifycode”:true})

显然,这个地址是用来判断是否该账号是否需要验证码的。

同时,在登录页面源码中可以得到图片的地址信息:src2=”//authcode.jd.com/verify/image?a=1&acid=37fe7934-fbc9-413d-b0a8-e0492e1d01b7&uid=37fe7934-fbc9-413d-b0a8-e0492e1d01b7”,显然图片的获取地址是由 http: + src2 + yys= + Unix时间戳 拼接组成:

1

2auth_code_url = soup.find(id=’JD_Verification1′).get(‘src2’)

auth_code_url = ‘http:{}&yys={}’.format(url, str(int(time.time()*1000)))

这样我们就能得到图片的下载地址,将其下载到本地,然后根据图片内容输入验证码即可。

1.3 会话保持

假设我们已经登录成功,那该如何保持会话呢?也就是我们切换到其他网页后,如何保持会话状态,不用再次登录。

其实在后续访问其他页面时只要在 header 中包含用户 cookie 的话,不需用户名密码即可登录。

这里就要用到会话对象 requests.Session,会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持某些参数,比如 cookies,并且 requests 模块每次会自动处理 cookies,不需要我们手动来处理 cookie,是不是很方便!

2 获取京豆

通过上面的分析,我们解决了京东的登录问题,下面要做的就是京豆的领取啦。

分析店铺签到的页面源码(这里仅列出部分源码):

1

2

3

4

5

店内签到最多可领
1京豆

去签到

可以看出,店铺列表是被 class=”bean-shop-list” 包裹的 li 组成,其中有店铺的超链接,我们需要访问这些链接地址进入到店铺主页进行签到。

随便访问一个签到店铺,查看签到的源码是一个地址:https://mall.jd.com/shopSign-1000006984.html,发现是由 固定地址 + 店铺 id 拼接而成的,那我们主要的工作就是获取店铺 id 了。

另外,在访问店铺时,在其 response 是包含 shop_id 的:

1

那我们就可以直接使用 BeautifulSoup 获取,然后拼接成签到地址:

1

2

3

4# 获取店铺 id

shop_id = soup.find(id=’shop_id’)[‘value’]

# 拼接签到地址

sign_url = ‘https://mall.jd.com/shopSign-{}.html’.format(shop_id)

这样就可以直接访问签到地址进行签到啦~

运行1

2

3

4

5

6

7

8

9

10$ python jd_beans.py

请输入京东账号:xxxx

请输入京东密码:xxxx

请根据下载图片 authcode.jpg 输入验证码:et3r

1. 获取登录信息成功

2. 登录成功

签到失败:http://sjhpchaju.jd.com

HTTPConnectionPool(host=’sjhpchaju.jd.com’, port=80): Max retries exceeded with url: / (Caused by NewConnectionError(‘: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution’,))

签到失败:http://huliuxiang.jd.com

HTTPConnectionPool(host=’huliuxiang.jd.com’, port=80): Max retries exceeded with url: / (Caused by NewConnectionError(‘: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution’,))

由于网络原因,部分店铺签到失败。

P.S. 签到后,在京东记录页面好像没找到京东增加的记录,泪奔,不过我们是来学技术的,不要在乎这些蝇头小利。

3 总结

本文的难点在于京东的登录过程,涉及到了 验证码、cookie 的处理,业务逻辑也稍微有些绕,需要判断是否需要验证码、是否登录成功等。其实,主要的就是在 HTTP 交互过程中抽取我们所要的目标数据。

另外,验证码处理部分还是有些问题,比如前面判断出登录不需要验证码,但是在登录时仍返回「请输入验证码」。还有,有兴趣的同学也可以进行扩展,比如秒杀、抢购等。

获取源码可以关注下面的公众号,回复「京东」即可。

参考:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192257.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 详解SpringMVC执行流程[通俗易懂]

    详解SpringMVC执行流程[通俗易懂]SpringMVC执行流程SpringMVC执行流程整体如下:执行流程分析(1)浏览器提交请求到中央调度器。(2)中央调度器直接将请求转给处理器映射器。(3)处理器映射器会根据请求,找到处理该请求的处理器,并将其封装为处理器执行链后返回给中央调度器。(4)中央调度器根据处理器执行链中的处理器,找到能够执行该处理器的处理器适配器。(5)处理器适配器调用执行处理器。(6)处理器将处理结果及要跳转的视图封装到一个对象ModelAndView中,并将其返回给处理器适配器。(7)处理器适配

    2022年6月28日
    30
  • 【一个小功能】从js判断ie版本,浅谈navigator对象的appName属性[通俗易懂]

    【一个小功能】从js判断ie版本,浅谈navigator对象的appName属性[通俗易懂]判断IE版本主要的是获取两个属性,a.当前浏览器名称,b.当前浏览器版本,为此不得不了解navigator对象。先贴代码作为一个初次了解navigator对象的人,对于appName属性(浏览器名

    2022年7月3日
    20
  • APP测试基本流程以及APP测试要点梳理,保证您看了不后悔!

    APP测试基本流程以及APP测试要点梳理,保证您看了不后悔!前言:相信很多刚刚步入测试行业的小伙伴对于APP测试不是很熟悉,这次我为大家提供一篇宝藏文章,希望大家喜欢,谢谢!一、APP测试基本流程1、流程图2、测试周期测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间。3、测试资源测试任务开始前,检查各项测试资源。–产品功能需求文档;–产品原型图;–产品效果图;–测试设备;–其他。4、日报及产品上线报告(内部报告机制)–测试人员每天需对所测项目发送测试日报。(

    2022年5月5日
    113
  • tqdm模块[通俗易懂]

    tqdm模块[通俗易懂]tqdm是Python进度条库。tqdm库下面有2个类我们经常使用:1.2.可以在Python长循环中添加一个进度提示信息用法:tqdm(iterator)trange(i)是

    2022年8月6日
    8
  • JAVA运用dos命令强制删除文件夹

    JAVA运用dos命令强制删除文件夹在对文件夹进行操作时,如果用file.deleate()方法,有时候恐怕不凑效.用了第三方的FileUtils的forceDeleteFile()还是不凑效,所以,自己就用java写一个基于dos命令的方法来实现强制删除文件夹.这并没有什么难的,只要知道dos命令,在java文件中调用runtime就好办了.在这里为写了三个方法:删除某个文件目录;删除某个文件(不是文件夹)和清空某个文件夹下

    2022年6月8日
    56
  • TCP与udp区别_个人总结和工作总结的区别

    TCP与udp区别_个人总结和工作总结的区别TCP与UDP区别总结:1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)4、每一条TCP连接只能是点到点的;UDP

    2025年9月19日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号