Python腳本實(shí)現(xiàn)蝦米網(wǎng)簽到功能
本文實(shí)例講述了Python腳本實(shí)現(xiàn)蝦米網(wǎng)簽到功能的方法。分享給大家供大家參考,具體如下:
概述
這個(gè)腳本完成了自動(dòng)登錄蝦米網(wǎng)、簽到的功能。
大致要用到urllib、urllib2、cookielib這幾個(gè)模塊。其實(shí)就是用python實(shí)現(xiàn)向指定的url去post數(shù)據(jù)。
至于我怎么知道在瀏覽器里面登錄和簽到時(shí)瀏覽器都向服務(wù)器post了什么數(shù)據(jù)的問(wèn)題,可以用強(qiáng)大的chrome:F12->Network里面可以看得到。有的服務(wù)器登錄成功后會(huì)讓客戶端瀏覽器跳轉(zhuǎn)或者立即刷新一次頁(yè)面等等,會(huì)把登錄時(shí)向服務(wù)器post的數(shù)據(jù)刷沒(méi)掉,那么就要用到強(qiáng)大的抓包軟件——WireShark來(lái)分析。比如用chrome:

然后就可以寫(xiě)了,構(gòu)造Request Headers和要Post的Data(就是Chrome里的Form Data),ID和Pwd是明文傳輸,呵呵。
代碼
下面是代碼:
# -*- coding: cp936 -*-
'''''
Created on 2012-11-15
@author: liushuai
'''
import urllib, urllib2, cookielib, sys
class 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 或者密碼錯(cuò)誤' 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()
然后運(yùn)行一下腳本就可以登錄、簽到了。

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

客戶端在向服務(wù)器post數(shù)據(jù)的時(shí)候,這個(gè)值會(huì)作為表單的一項(xiàng)數(shù)據(jù)“神不知鬼不覺(jué)”(因?yàn)槭潜韱蔚碾[藏域)地一同post過(guò)去,服務(wù)端收到客戶端的post請(qǐng)求后,和服務(wù)端的formhash值作對(duì)比,就能知道是否是通過(guò)瀏覽器頁(yè)面的方式post的數(shù)據(jù)了。
不過(guò)如果真的是為了防止這,這個(gè)做法真的有用嗎?我試了一下,只需用簡(jiǎn)單的正則分析下登錄成功返回的html,找到formhash值,再用上述方法和理論post過(guò)去即可,成功的完成了簽到的功能。
反正不管怎么說(shuō),就是用腳本“假裝”地完成了一下用瀏覽器登錄并簽到的過(guò)程。
附:由于網(wǎng)站可能進(jìn)行改版或升級(jí),那么向服務(wù)器中post的數(shù)據(jù)可能會(huì)有變化,那么就要對(duì)代碼進(jìn)行相應(yīng)調(diào)整,故代碼僅供研究和學(xué)習(xí)參考之用。
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Python入門(mén)與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- Python 實(shí)現(xiàn)毫秒級(jí)淘寶搶購(gòu)腳本的示例代碼
- windows 10 設(shè)定計(jì)劃任務(wù)自動(dòng)執(zhí)行 python 腳本的方法
- Python獲取當(dāng)前腳本文件夾(Script)的絕對(duì)路徑方法代碼
- python腳本執(zhí)行CMD命令并返回結(jié)果的例子
- Python腳本利用adb進(jìn)行手機(jī)控制的方法
- python腳本開(kāi)機(jī)自啟的實(shí)現(xiàn)方法
- java 直接調(diào)用python腳本,并傳遞參數(shù)代碼實(shí)例
- 基于Python實(shí)現(xiàn)簽到腳本過(guò)程解析
相關(guān)文章
python創(chuàng)建與遍歷二叉樹(shù)的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于python創(chuàng)建與遍歷二叉樹(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
python 辦公自動(dòng)化——基于pyqt5和openpyxl統(tǒng)計(jì)符合要求的名單
前幾天接到的一個(gè)需求,因?yàn)閷W(xué)校給的名單是青年大學(xué)習(xí)已學(xué)習(xí)的名單,然而要知道未學(xué)習(xí)的名單只能從所有團(tuán)員中再排查一次,過(guò)程相當(dāng)麻煩。剛好我也學(xué)過(guò)一些操作辦公軟件的基礎(chǔ),再加上最近在學(xué)pyqt5,所以我決定用python寫(xiě)個(gè)自動(dòng)操作文件的腳本給她用用。2021-05-05
Python-基礎(chǔ)-入門(mén) 簡(jiǎn)介
這篇文章主要介紹了Python-基礎(chǔ)-簡(jiǎn)介入門(mén)的相關(guān)資料,需要的朋友可以參考下2014-08-08
Python編程實(shí)現(xiàn)生成特定范圍內(nèi)不重復(fù)多個(gè)隨機(jī)數(shù)的2種方法
這篇文章主要介紹了Python編程實(shí)現(xiàn)生成特定范圍內(nèi)不重復(fù)多個(gè)隨機(jī)數(shù)的2種方法,涉及Python基于random生成隨機(jī)數(shù)的常見(jiàn)操作技巧,需要的朋友可以參考下2017-04-04
python scrapy腳本報(bào)錯(cuò)問(wèn)題及解決
這篇文章主要介紹了python scrapy腳本報(bào)錯(cuò)問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
python?selenium模擬點(diǎn)擊問(wèn)題解決方案
這篇文章主要介紹了python?selenium模擬點(diǎn)擊問(wèn)題,涉及到安裝谷歌瀏覽器和瀏覽器驅(qū)動(dòng)的相關(guān)知識(shí)介紹,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05
創(chuàng)建SparkSession和sparkSQL的詳細(xì)過(guò)程
SparkSession 是 Spark SQL 的入口,Builder 是 SparkSession 的構(gòu)造器。 通過(guò) Builder, 可以添加各種配置,并通過(guò) stop 函數(shù)來(lái)停止 SparkSession,本文給大家分享創(chuàng)建SparkSession和sparkSQL的詳細(xì)過(guò)程,一起看看吧2021-08-08
Python基于Streamlit實(shí)現(xiàn)音頻處理示例詳解
這篇文章主要為大家詳細(xì)介紹了如何基于Streamlit實(shí)現(xiàn)的音頻處理,包含錄音,語(yǔ)音轉(zhuǎn)文本,文件下載和進(jìn)度顯示功能,有需要的小伙伴可以參考一下2025-03-03
Pandas中常用的七個(gè)時(shí)間戳處理函數(shù)使用總結(jié)
在零售、經(jīng)濟(jì)和金融等行業(yè),數(shù)據(jù)總是由于貨幣和銷(xiāo)售而不斷變化,生成的所有數(shù)據(jù)都高度依賴于時(shí)間。如果這些數(shù)據(jù)沒(méi)有時(shí)間戳或標(biāo)記,實(shí)際上很難管理所有收集的數(shù)據(jù)。本文為大家準(zhǔn)備了Pandas中常用的七個(gè)時(shí)間戳處理函數(shù),需要的可以參考一下2022-04-04

