专栏首页SeanCheney的专栏Python模拟登陆 —— 征服验证码 7 京东

Python模拟登陆 —— 征服验证码 7 京东

登录界面

京东的登录表单设置了许多隐藏字段,如下所示:

隐藏字段

所以都要获取下来。

同样也是输错三次之后出现authcode。

验证码

import requests
from bs4 import BeautifulSoup
import time

try:
    input = raw_input
except:
    pass

class JDlogin(object):
    def __init__(self,un,pw):
        self.headers = {'User-Agent':"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
                        'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
                        'Accept-Encoding':'gzip, deflate, sdch',
                        'Accept-Language':'zh-CN,zh;q=0.8',
                        'Connection':'keep-alive',
                        }
        self.session = requests.session()
        self.login_url = "http://passport.jd.com/uc/login"
        self.post_url = "http://passport.jd.com/uc/loginService"
        self.auth_url = "https://passport.jd.com/uc/showAuthCode"
        self.un = un
        self.pw = pw

    def get_authcode(self,url):
        self.headers['Host'] = 'authcode.jd.com'
        self.headers['Referer'] = 'https://passport.jd.com/uc/login'
        response = self.session.get(url, headers = self.headers)
        with open('authcode.jpg','wb') as f:
            f.write(response.content)
        authcode = input("plz enter authcode:")
        return authcode

    def get_info(self):
        '''获取登录相关参数'''
        try:
            page = self.session.get(self.login_url, headers = self.headers )
            soup = BeautifulSoup(page.text,"lxml")
            input_list = soup.select('.form input')

            data = {}
            data['uuid'] = input_list[0]['value']
            data['eid'] = input_list[4]['value']
            data['fp'] = input_list[5]['value']
            data['_t'] = input_list[6]['value']
            rstr = input_list[7]['name']
            data[rstr] = input_list[7]['value']
            acRequired = self.session.post(self.auth_url, data={'loginName':self.un}).text #返回({"verifycode":true})或({"verifycode":false})

            if 'true' in acRequired:
                print ('need authcode, plz find it and fill in ')
                acUrl = soup.select('.form img')[0]['src2']
                acUrl = 'http:{}&yys={}'.format(acUrl,str(int(time.time()*1000)))
                authcode = self.get_authcode(acUrl)
                data['authcode'] = authcode
            else:
                data['authcode'] = ''

        except Exception as e:
            print (e)
        finally:
            return data
    def login(self):
        
        postdata = self.get_info()
        postdata['loginname'] = self.un
        postdata['nloginpwd'] = self.pw
        postdata['loginpwd'] = self.pw
        try:
            self.headers['Host'] = 'passport.jd.com'
            self.headers['Origin'] = 'https://passport.jd.com'
            self.headers['X-Requested-With'] = 'XMLHttpRequest'
            login_page = self.session.post(self.post_url, data = postdata, headers = self.headers)
            print (login_page.text)  #若返回{“success”:”http://www.jd.com”},说明登录成功
        except Exception as e:
            print (e)

if __name__=="__main__":
    username = input("plz enter username:")
    password = input("plz enter password:")
    JD = JDlogin(username,password)
    JD.login()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 《Learning Scrapy》(中文版)第8章 Scrapy编程

    到目前为止,我们创建爬虫的目的是抓取数据,并提取信息。除了爬虫,scrapy可以让我们微调它的功能。例如,你会经常碰到以下状况:

    SeanCheney
  • 《Learning Scrapy》(中文版)第9章 使用Pipelines

    在上一章,我们学习了如何辨析Scrapy中间件。在本章中,我们通过实例学习编写pipelines,包括使用REST APIs、连接数据库、处理CPU密集型任务、...

    SeanCheney
  • 《Learning Scrapy》(中文版)第11章 Scrapyd分布式抓取和实时分析

    我们已经学了很多东西。我们先学习了两种基础的网络技术,HTML和XPath,然后我们学习了使用Scrapy抓取复杂的网站。接着,我们深入学习了Scrapy的设置...

    SeanCheney
  • python实现汽车管理系统

    本文实例为大家分享了python实现汽车管理系统的具体代码,供大家参考,具体内容如下

    砸漏
  • python 搭建简单的http ser

    py3study
  • 《统计学习方法》第 2 章 感知机 可视化

    假设训练数据集是线性可分的 感知机学习的目标是求得一个能够将训练集正实例点和负实例点完全正确分开的分离超平面。为了找出这样的超平面,即确定感知机模型参数

    iOSDevLog
  • 【Code】关于 GCN,我有三种写法

    本篇文章主要基于 DGL 框架用三种不同的方式来实现图卷积神经网络。手机看可能不太方便,可以点击阅读原文,移步到知乎上看(但是我忘了加 = =)。

    阿泽 Crz
  • 用最小二乘法对多项式进行拟合并可视化

    本篇文章所讲代码是对2018年全国大学生数学建模比赛A题附件的数据进行拟合,代码如下:

    用户3577892
  • NLP经典算法复现!CRF原理及实现代码

    寄语:本文先对马尔可夫过程及隐马尔可夫算法进行了简单的介绍;然后,对条件随机场的定义及其三种形式进行了详细推导;最后,介绍了条件随机场的三大问题,同时针对预测问...

    Datawhale
  • python---贪吃蛇

    因为是简单的做一个贪吃蛇,并没有做其他的分数显示界面,以及结果的显示,具体效果就是运行程序后,出现上面的界面,然后只有你一动wasd的其中一个键,贪吃蛇便开始运...

    sjw1998

扫码关注云+社区

领取腾讯云代金券