Windows系統中Python實現每
- 2020 年 1 月 3 日
- 筆記
之前說要每周寫的。。然後最近忙著畢業就一直沒動。>.<感覺月更都困難了。
問題描述
在每天比如10點到11點之間定時自動登陸網站,簽到
實現思路
- 使用fiddler抓包工具先登陸一遍,把請求的地址,header等資訊都拿到。
- 使用python寫一個腳本,模擬瀏覽器向伺服器發送登陸,簽到請求
- 使用批處理bat來寫幾句話,隨機在一小時內運行python腳本
- 使用Windows自帶的計劃任務,定時每日10點運行bat腳本
另外,之前不想那麼麻煩寫程式碼,還去找了一個叫做按鍵精靈的軟體來模擬執行。不過那個軟體是模擬滑鼠和鍵盤,所以執行的時候會有介面出現,而且你的滑鼠和鍵盤不能動,所以後來放棄了。如果覺得這個麻煩也可以試試那個。可以生成一個按鍵小精靈的exe,用計劃任務定時執行。這個軟體也很邪教啊,還可以自動截圖。
實現過程
一、fiddler抓包
這個直接下載然後上手做就可以了,打開工具,然後進行正常的登陸,每一個請求的過程都有。主要目的是找到每個發送請求的url和header資訊。 比如我練習網站的登陸請求發送的url是http://XXX.com/Home/Login/log…。
這個具體的url也可以用Google瀏覽器chrome進入審查元素去選取按鈕,簡陋一些的網站可以看到js程式碼是怎麼跳轉過去的。如果遇到一些按鈕點擊一次以後無法再點,可以用這個辦法找它的url。
二、python寫請求腳本
這裡用這裡用python3寫的,這部分總結晚點寫:P
import urllib.request import urllib import gzip import http.cookiejar import time # generate request header, deal with cookie 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 #encapsulate the header as the browser header = { 'Connection': 'Keep-Alive', 'Accept-Language': 'zh-CN', 'Accept': 'image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*', 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)', 'Accept-Encoding': 'gzip, deflate', 'X-Requested-With': 'XMLHttpRequest', 'Host': 'http://XXX.com/', } url = 'http://XXX.com/Home/Login/login_submit' opener = getOpener(header) id = 'xxxx'#你的用戶名 password = 'fddafda'#你的密碼,抓包是什麼就輸什麼,有時候是md5加密的 postDict = { 'logname': id, 'passwd': password, } #這裡的post數據的json可以檢查fiddler的webform里會有。 postData = urllib.parse.urlencode(postDict).encode() op = opener.open(url, postData) data = op.read() print(data) #簽到 url = 'http://XXX.com/index/index/sign/P/in' op = opener.open(url) data = op.read() print(data)
三、bat調用python腳本
@echo off rem 這裡就是先用cd命令轉到.py文件所在的地址 C: cd C:Windows rem 用random生成一個數字對3600秒取余得到一個一小時內的隨機秒數存在rd中 set /a rd=%random%%%3600 rem ping用於等待若干秒 ping -n %rd% 127.0.0.1 > nul python test.py rem 生成日誌 set today=%date:~0,4%-%date:~5,2%-%date:~8,2% echo login at %today%_%time:~0,2%:%time:~3,2% >> E:LogFilelog%today%.txt exit
rem是注釋可以刪,python裡面還有一個pythonw.exe調用這個可以完全不出現介面。如果命令行cmd裡面沒有python,去環境變數path裡面加一下python所在的地址。
總結
實現這個小任務,讓我發現python的功能確實很大,而且可以用的庫也非常多。這裡主要是在廖雪峰的python教程中查看的python基本的東西。然後搜了一個例子。模仿著做的。
另外,對前端的啟發也蠻大的。防止這些爬蟲去解析前端的資訊,主要可以有以下措施:
- 對所有發布的網站中JS進行壓縮混淆加密
- 一些關鍵數據可以用圖片展示,增加一點爬取難度
- 登陸設置驗證碼和動態token