python實現的刷點選率程式碼
阿新 • • 發佈:2019-02-17
背景
同事的老爸參加微信的一個活動,需要刷點選率,因此,寫了一個程式助之。
準備
微信活動也是有真實地址的。
通過mitmproxy(man in the middle proxy)的方式,可以獲取微信獲取網頁的真實地址(url)。
完整可執行程式碼
import os
import time
import argparse
import platform
def visit_win(url, times, duration):
import urllib2
def _visit_win():
try:
s = urllib2.urlopen(url).read()
except urllib2.HTTPError,e:
print (e.code)
for i in range(times):
_visit_win()
print("{} Done!".format(i+1))
#do not use duration in win
def visit_linux(url, times, duration):
import subprocess
cmd = "curl {}".format(url)
for i in range(times):
subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE,shell=True )
print("{} Done!".format(i+1))
time.sleep(duration)
def parse_input():
input_parser = argparse.ArgumentParser()
input_parser.add_argument("--url",'-u', help="the url your need to visit")
input_parser.add_argument("--times",'-t', type=int, default=10, help="how many times you need to visit" )
input_parser.add_argument("--duration",'-d', default=0.5, type=float, help="the duration between two visits")
input_args = input_parser.parse_args()
url = input_args.url
times = input_args.times
duration = input_args.duration
return url, times, duration
def main():
url, times, duration = parse_input()
if platform.system().lower() == 'linux':
visit_linux(url, times, duration)
else:
visit_win(url, times, duration)
print("My evil job is finished!")
if __name__ == '__main__':
main()
我的說明
跨平臺
linux通過curl可以非常快速的訪問。
但是同事不懂linux,只能通過urllib庫寫個跨平臺的實現
可擴充套件性
為了增加程式的通用性,加入argparse庫,通過程式入參實現靈活應用。
**注意:
推薦使用argparse,WXCOP的很多同學還是使用老的OPTPARSE庫,argparse是用來替代OPTPARSE庫的(來自官方)**
速度
使用subprocess庫會比os.system的方式快,因為,它會fork一個程序,而os.system是阻塞(等待網頁返回很慢),速度快很多。
另外,保留了linux的curl方式,它比urllib庫要快
函式內的函式
visit_win裡還有一個只能內部使用的_visit_win
這樣可以表明這個函式的作用域
庫的匯入
沒有呆板的在開頭匯入所有需要的庫,而是根據作業系統,在需要時,才匯入特定的庫
期望大家的優化
程式碼裡留了優化空間,例如使用執行緒的方式加快urllib的訪問速度等
最後
我寫python好幾年了,有很多積累,歡迎python愛好者一起交流。