Windows系統中Python實現每

之前說要每周寫的。。然後最近忙著畢業就一直沒動。>.<感覺月更都困難了。

問題描述

在每天比如10點到11點之間定時自動登陸網站,簽到

實現思路

  1. 使用fiddler抓包工具先登陸一遍,把請求的地址,header等資訊都拿到。
  2. 使用python寫一個腳本,模擬瀏覽器向伺服器發送登陸,簽到請求
  3. 使用批處理bat來寫幾句話,隨機在一小時內運行python腳本
  4. 使用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