国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python腳本實現蝦米網簽到功能

2020-01-04 17:33:08
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Python腳本實現蝦米網簽到功能的方法,涉及Python調用URL模塊實現數據傳輸與處理的相關技巧,需要的朋友可以參考下
 

本文實例講述了Python腳本實現蝦米網簽到功能的方法。分享給大家供大家參考,具體如下:

概述

這個腳本完成了自動登錄蝦米網、簽到的功能。

大致要用到urllib、urllib2、cookielib這幾個模塊。其實就是用python實現向指定的url去post數據。

至于我怎么知道在瀏覽器里面登錄和簽到時瀏覽器都向服務器post了什么數據的問題,可以用強大的chrome:F12->Network里面可以看得到。有的服務器登錄成功后會讓客戶端瀏覽器跳轉或者立即刷新一次頁面等等,會把登錄時向服務器post的數據刷沒掉,那么就要用到強大的抓包軟件——WireShark來分析。比如用chrome:

Python腳本,蝦米網

然后就可以寫了,構造Request Headers和要Post的Data(就是Chrome里的Form Data),ID和Pwd是明文傳輸,呵呵。

代碼

下面是代碼:

# -*- coding: cp936 -*-'''''Created on 2012-11-15@author: liushuai'''import urllib, urllib2, cookielib, sysclass LoginXiami:  login_header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/537.4'}  signin_header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/537.4', 'X-Requested-With':'XMLHttpRequest', 'Content-Length':0, 'Origin':'http://www.xiami.com', 'Referer':'http://www.xiami.com/'}  email = ''  password = ''  cookie = None  cookieFile = './cookie.dat'  def __init__(self, email, pwd):    self.email = email    self.password = pwd    self.cookie = cookielib.LWPCookieJar()    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookie))    urllib2.install_opener(opener)  def login(self):    postdata = {'email':self.email, 'password':self.password, 'done':'http://www.xiami.com', 'submit':'%E7%99%BB+%E5%BD%95'}    postdata = urllib.urlencode(postdata)    print 'Logining...'    req = urllib2.Request(url='http://www.xiami.com/member/login', data=postdata, headers=self.login_header)    result = urllib2.urlopen(req).read()    self.cookie.save(self.cookieFile)    result = str(result).decode('utf-8').encode('gbk')    if 'Email 或者密碼錯誤' in result:      print 'Login failed due to Email or Password error...'      sys.exit()    else :      print 'Login successfully!'  def signIn(self):    postdata = {}    postdata = urllib.urlencode(postdata)    print 'signing...'    req = urllib2.Request(url='http://www.xiami.com/task/signin', data=postdata, headers=self.signin_header)    result = urllib2.urlopen(req).read()    result = str(result).decode('utf-8').encode('gbk')    self.cookie.save(self.cookieFile)    try:      result = int(result)    except ValueError:      print 'signing failed...'      sys.exit()    except:      print 'signing failed due to unknown reasons ...'      sys.exit()    print 'signing successfully!'    print self.email,'have signed', result, 'days continuously...'if __name__ == '__main__':  user = LoginXiami('你的登錄郵箱', '你的密碼')  user.login()  user.signIn()

然后運行一下腳本就可以登錄、簽到了。

Python腳本,蝦米網

后記

有的Discuz!論壇據說是為了防止用戶用網頁之外的途徑向服務器post數據,服務器在每個用戶每次登錄成功后生成一個叫formhash的值,作為表單的隱藏域返回給客戶端(服務端也有保存)。

Python腳本,蝦米網

客戶端在向服務器post數據的時候,這個值會作為表單的一項數據“神不知鬼不覺”(因為是表單的隱藏域)地一同post過去,服務端收到客戶端的post請求后,和服務端的formhash值作對比,就能知道是否是通過瀏覽器頁面的方式post的數據了。

不過如果真的是為了防止這,這個做法真的有用嗎?我試了一下,只需用簡單的正則分析下登錄成功返回的html,找到formhash值,再用上述方法和理論post過去即可,成功的完成了簽到的功能。

反正不管怎么說,就是用腳本“假裝”地完成了一下用瀏覽器登錄并簽到的過程。
:由于網站可能進行改版或升級,那么向服務器中post的數據可能會有變化,那么就要對代碼進行相應調整,故代碼僅供研究和學習參考之用。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 师宗县| 甘泉县| 夏邑县| 昭苏县| 民和| 广昌县| 准格尔旗| 舞阳县| 巴彦淖尔市| 栖霞市| 宁波市| 会昌县| 嫩江县| 家居| 田阳县| 调兵山市| 威海市| 遵义市| 民丰县| 岗巴县| 从化市| 石狮市| 甘德县| 黄山市| 额尔古纳市| 红原县| 丘北县| 津南区| 平山县| 延川县| 沅江市| 大连市| 吉首市| 卢湾区| 阳春市| 灵寿县| 盐源县| 会同县| 金华市| 凤山市| 信宜市|