这是一个自动化程度较高的程序,运行本程序后会从chrome中读取cookies用于登录人人影视签到,
并且会自动添加一个windows 任务计划,这个任务计划每天下午两点会执行本程序进行签到。
sys.executable == \’C:\\\\Python34\\\\pythonw.exe\’
使用pythonw 执行.py 不会弹出命令行窗口。
以system权限执行的程序不能访问网络,/ru 参数后的值改为administrators或者users
import os
import sys
import subprocess
import sqlite3
import time
import requests
from win32.win32crypt import CryptUnprotectData
def getcookiefromchrome(host=\'.oschina.net\'):
cookiepath=os.environ[\'LOCALAPPDATA\']+r\"\\Google\\Chrome\\User Data\\Default\\Cookies\"
sql = \"select host_key,name,encrypted_value from cookies where host_key=\'%s\'\" % host
with sqlite3.connect(cookiepath) as conn:
cu = conn.cursor()
cookies = {name:CryptUnprotectData(encrypted_value)[1].decode() for host_key,name,encrypted_value in cu.execute(sql).fetchall()}
print(cookies)
return cookies
#运行环境windows 2012 server python3.4 x64 pywin32 chrome 50
\"\"\"
#windows 版chrome Cookies文件为一个sqlite3数据库,
#chrome 33以后的版本的cookies的value都加密存在encrypted_value中,
#需要使用win32crypt的CryptUnprotectData 对encrypted_value进行解密,
win32crypt是pywin32的一部分,需要安装最新的pywin32模块
\"\"\"
#getcookiefromchrome()
#getcookiefromchrome(\'.baidu.com\')
def sign():
zmcookie = getcookiefromchrome(\'.zimuzu.tv\')
url = \'http://www.zimuzu.tv/user/login/getCurUserTopInfo\'
requests.get(url,cookies=zmcookie).text
rs = requests.get(\'http://www.zimuzu.tv/user/sign\',cookies=zmcookie).text.split(\'\\n\')
info = [r for r in rs if \"三次登录时间\" in r]
time_=time.strftime(\"%c\")
with open(\"zmlog.txt\",\"a+\") as f:
f.write(time_ + \" :\" )
f.writelines(info)
f.write(\"\\n\\n\")
tn=\'zmautosign\'
def run(ar=sys.argv):
if len(ar)==1:
sign()
if not intask():
addtask() #添加任务计划
elif len(ar)>1 and ar[1].lower()==\"-task\":
sign()
def intask(tn=tn,ar=sys.argv[0]):
txt=subprocess.getoutput(\'schtasks /query |find \"%s\"\' % tn)
if tn in txt:
return 1
else:
return 0
def addtask(tn=tn,ar=sys.argv[0]):
cmd=\'schtasks /create /F /ru Administrators /tn \"%s\" /sc daily /st 14:00:00 /tr \"%s %s -task\"\' % (tn,sys.executable,ar)
subprocess.call(cmd,shell=1)
os.chdir(sys.path[0])
run()