Python爬虫实现自动登录、签到

原创 2015年11月26日 17:00:32

        更新 2016/8/9:最近发现目标网站已经屏蔽了这个登录签到的接口(PS:不过我还是用这个方式赚到了将近一万点积分·····)

       前几天女朋友跟我说,她在一个素材网站上下载东西,积分总是不够用,积分是怎么来的呢,是每天登录网站签到获得的,当然也能购买,她不想去买,因为偶尔才会用一次,但是每到用的时候就发现积分不够,又记不得每天去签到,所以就有了这个纠结的事情。怎么办呢,想办法呗,于是我就用python写了个小爬虫,每天去自动帮她签到挣积分。废话不多说,下面就讲讲代码。

       我这里用的是python3.4,使用python2.x的朋友如果有需要请绕道查看别的文章。

       工具:Fiddler

       首先下载安装Fiddler,这个工具是用来监听网络请求,有助于你分析请求链接和参数。

       打开目标网站:http://www.17sucai.com/,然后点击登录



       好了,先别急着登录,打开你的Fiddler,此时Fiddler里面是没有监听到网络请求的,然后回到页面,输入邮箱和密码,点击登录,下面再到fiddler里面去看




    这里面的第一个请求就是你点击登录的网络请求,点击这个链接可以在右边看到你的一些请求信息




然后点击WebForms可以看到你的请求参数,也就是用户名和密码




下面我们有代码来实现登录功能


import urllib.request
import urllib
import gzip
import http.cookiejar

#定义一个方法用于生成请求头信息,处理cookie
def getOpener(head):
    # deal with the Cookies
    <pre name="code" class="python">    cj = http.cookiejar.CookieJar()
    pro = urllib.request.HTTPCookieProcessor(cj)
    opener = urllib.request.build_opener(pro)
    header = []
    for key, value in head.items():
        elem = (key, value)
        header.append(elem)
    opener.addheaders = header
    return opener

#定义一个方法来解压返回信息
def ungzip(data):
    try:        # 尝试解压
        print('正在解压.....')
        data = gzip.decompress(data)
        print('解压完毕!')
    except:
        print('未经压缩, 无需解压')
    return data

#封装头信息,伪装成浏览器
header = {
    'Connection': 'Keep-Alive',
    'Accept-Language': 'zh-CN,zh;q=0.8',
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',
    'Accept-Encoding': 'gzip, deflate',
    'X-Requested-With': 'XMLHttpRequest',
    'Host': 'www.17sucai.com',
}


url = 'http://www.17sucai.com/auth'
opener = getOpener(header)

id = 'xxxxxxxxxxxxx'#你的用户名
password = 'xxxxxxx'#你的密码
postDict = {
        'email': id,
        'password': password,
}

postData = urllib.parse.urlencode(postDict).encode()
op = opener.open(url, postData)
data = op.read()
data = ungzip(data)

print(data)

好了,接下来清空一下你的Fiddler,然后运行这个程序,看一下你的Fiddler

你可以点击这个链接,看看右边的请求信息和你用浏览器请求的是不是一样

下面是程序后代打印的信息

code=200表示登陆成功

解析来就需要获取到签到的url,这里你需要一个没有签到的账号在网站中点击签到按钮,然后通过Fiddler来获取到签到的链接和需要的信息。

然后点击“签到”,签到成功后到Fiddler中查看捕捉到的url

点击这个url可以在右边查看访问这个链接时所需要的头信息和cookies神马的,我们已经登录成功后直接使用cookies就行了,python对cookies的处理做好了封装,下面是我的代码中对cookies的使用

cj = http.cookiejar.CookieJar()
    pro = urllib.request.HTTPCookieProcessor(cj)
    opener = urllib.request.build_opener(pro)

下面是签到成功返回的信息:code=200表示请求成功,day=1表示连续签到一天,score=20表示获得的积分数


下面放出完整代码,当然,为了测试代码签到,你还需要你一没有签到过的账号


import urllib.request
import urllib
import gzip
import http.cookiejar


def getOpener(head):
    # deal with the Cookies
    cj = http.cookiejar.CookieJar()
    pro = urllib.request.HTTPCookieProcessor(cj)
    opener = urllib.request.build_opener(pro)
    header = []
    for key, value in head.items():
        elem = (key, value)
        header.append(elem)
    opener.addheaders = header
    return opener

def ungzip(data):
    try:        # 尝试解压
        print('正在解压.....')
        data = gzip.decompress(data)
        print('解压完毕!')
    except:
        print('未经压缩, 无需解压')
    return data


header = {
    'Connection': 'Keep-Alive',
    'Accept-Language': 'zh-CN,zh;q=0.8',
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',
    'Accept-Encoding': 'gzip, deflate',
    'X-Requested-With': 'XMLHttpRequest',
    'Host': 'www.17sucai.com',
}


url = 'http://www.17sucai.com/auth'
opener = getOpener(header)

id = 'xxxxxxx'
password = 'xxxxxxx'
postDict = {
        'email': id,
        'password': password,
}

postData = urllib.parse.urlencode(postDict).encode()
op = opener.open(url, postData)
data = op.read()
data = ungzip(data)

print(data)


url = 'http://www.17sucai.com/member/signin' #签到的地址

op = opener.open(url)

data = op.read()
data = ungzip(data)

print(data)

相比登录,签到也就是在登录完成后重新打开一个链接而已,由于我的账号都已经签到过了,这里就不在贴运行代码的图 了。



接下来要做的就是在你电脑上写个bat 脚本,再在“任务计划”中添加一个定时任务就行了。


在此之前你还需要配置一下python的环境变量,这里就不在赘述了。



版权声明:本文为博主原创文章,未经博主允许不得转载。

[Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍

前三篇文章介绍了安装过程和通过Selenium实现访问Firefox浏览器并自动搜索"Eastmount"关键字及截图的功能。而这篇文章主要简单介绍如何实现自动登录163邮箱,同时继续介绍Seleni...
  • Eastmount
  • Eastmount
  • 2015年08月21日 17:57
  • 18123

Python使用Requests第三方库自动登陆知乎

写爬虫就是我学习python的动力,刚开始学习的时候是用python自带的urllib和urllib2的库写爬虫,感觉有点繁琐,今天学习了Requests库感觉用起来比之前用的库方便多了。对网页的分析...
  • Win_Man
  • Win_Man
  • 2016年01月23日 20:32
  • 4657

python 用requests模块自动登录

用requests模块重新写了下。 需要启用requests的会话保持。要不然登录后,访问其他网页会断掉连接-- coding: utf-8 --import urllib2 import url...
  • u011533425
  • u011533425
  • 2015年10月24日 23:03
  • 1602

python脚本实现自动登陆校园网

搞了几天终于把这个搞出来了,代码不到50行,要是别的网站很好模拟,但这个稍微有点麻烦,抓包工具用了好多,httpfox没抓全,wireshark抓的又太多不好分析,最后还是用神器fiddler才把它搞...
  • abitch
  • abitch
  • 2016年07月18日 10:33
  • 1810

Python自动登录脚本

一、环境 Python 2.7.x pip 8.1.1 注意:pip升级后下载依赖包会报certificate verifyfailed       解决办法是加入--trusted-host...
  • u012292247
  • u012292247
  • 2016年12月21日 16:29
  • 2632

python实现自动登录

from selenium import webdriver browserFirefox = webdriver.Firefox() print(type(browserFirefox)) ...
  • pengzhi5966885
  • pengzhi5966885
  • 2017年05月11日 15:56
  • 817

python3自动登录

import urllib ...
  • wppkind
  • wppkind
  • 2016年07月03日 22:00
  • 892

利用Python实现自动登录

利用python,可以实现填充网页表单,从而自动登录WEB门户。
  • zat111
  • zat111
  • 2015年05月09日 19:59
  • 3241

Python自动登录带密码的网站

1,fiddler工具:利用此工具可以来查看需要登录的网站表单信息 http://www.fiddler2.com/fiddler2/ 2,Python源码:实现了自动登录需要密码验证的网站。 ...
  • appletreesujie
  • appletreesujie
  • 2012年11月14日 11:38
  • 5157

python3的爬虫算法(3) 实现自动登陆,签到

学完python不久觉得可以写一个自动签到的东西来省点力气,而且也可以赚取积分。 一开始的文章是看的这个:http://blog.csdn.net/u283056051/article/detail...
  • fengzhizi76506
  • fengzhizi76506
  • 2017年04月20日 08:53
  • 1120
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python爬虫实现自动登录、签到
举报原因:
原因补充:

(最多只允许输入30个字)