首页
社区
课程
招聘
[原创]python3+任务计划实现的人人字幕网站自动签到
发表于: 2016-6-8 17:24 11170

[原创]python3+任务计划实现的人人字幕网站自动签到

2016-6-8 17:24
11170
"""
python3+任务计划实现的人人字幕网站自动签到
2016年6月8日 09:52:28  codegay

这是一个自动化程度较高的程序,运行本程序后会从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()

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 3
支持
分享
最新回复 (16)
雪    币: 135
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
既然是 签到,那就需要 登录 啊。
直接用 requests  登录后,cookies 自然就有了,何必用 chrome?
2016-6-9 06:49
0
雪    币: 757
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
过来顶一下,支持原创
2016-6-9 07:16
0
雪    币: 168
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4

签到是签到,登录是登录。
猪都能明白道理不用再多说。我就爱这么玩。有现成的cookies能用为嘛不用。
2016-6-9 12:18
0
雪    币: 168
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
搜索看到你发帖子问过 如何恢复Chrome保存的登陆密码?

读取cookies的方法与道理,和读取密码的是一样的。
2016-6-9 12:41
0
雪    币: 135
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
呵呵~
你仔细看一下那个贴。
了解一下 chrome 的加密方式。
2016-6-9 14:32
0
雪    币: 135
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
登录 + 签到
很简单的,别搞那么复杂~

import requests as req
import re # 正则

ajaxloginUrl = 'http://www.zimuzu.tv/User/Login/ajaxLogin'
UserInfoUrl = 'http://www.zimuzu.tv/user/login/getCurUserTopInfo'
signUrl = 'http://www.zimuzu.tv/user/sign'

##Request URL:http://www.zimuzu.tv/User/Login/ajaxLogin
loginheaders={
    'Accept':'application/json, text/javascript, */*; q=0.01',
    'Content-Type':'application/x-www-form-urlencoded',
    'Origin':'http://www.zimuzu.tv',
    'Referer':'http://www.zimuzu.tv/user/login',
    'User-Agent':'Mozilla/5.0',
    'X-Requested-With':'XMLHttpRequest'
}

##Form Data 
FormData={
    'account':'改为你自己的 账户名',
    'password':'改为你自己的 密码',
    'remember':'1',
    'url_back':'http://www.zimuzu.tv/'
}

s=req.Session()
s.headers=loginheaders 
rsp=s.post(ajaxloginUrl,data=FormData) # 登录
print('cookies:',s.cookies.items(),'\r\n')
print('UserInfo:',s.get(UserInfoUrl).json(),'\r\n')

rsp=s.get(signUrl) # 签到

# 整理并显示 签到信息
t=rsp.text
ptn='<div class="middle-box">[\s\S]*功能和权限</div>'
signInfo=re.search(ptn,t)
if signInfo: 
    t=signInfo.group()
    t=re.sub('<[^>]*>','',t)
    t=re.sub('\s{2,}','\r\n',t)
    print('sign:',t) # 显示 签到信息
else:
    print('未获取签到信息!')
2016-6-11 01:52
0
雪    币: 168
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
你没做过,所以你觉得复杂。
2016-6-11 04:12
0
雪    币: 135
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
其实就2步是必要的:

rsp=s.post(ajaxloginUrl,data=FormData) # 登录
rsp=s.get(signUrl) # 签到

其他是都可以省略,cookies 是自动获取的,无须去读chrome的 Sqlite。
而且,你把chrome 保存的数据库复制到别的电脑上,就读不出来了。
登录+签到,可以在任意的电脑上运行。
2016-6-11 08:06
0
雪    币: 168
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
哎哟,宝宝你好聪明。

但是同样的代码一个月前我自己写过了。
2016-6-11 10:05
0
雪    币: 53
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
别人没装chrome呢,为了用你的“高度自动化”,还得再下载个chrome?还得在chrome里登录一下?
别说发出来自己用,自己用发出来得瑟毛?
这种小孩子玩意也没人感兴趣,别说提前一个月写了,就算提前一年写了也有人比你先的。
2016-6-11 23:09
0
雪    币: 168
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12

我以为大家都是聪明人,简单的道理不需要反复解释呢。

1、别人有没有兴趣我才不在乎呢。
2、我所有的代码都是玩具,或者不可用的玩具。
3、重要的是我自己查了资料,学到了东西,把自己想法变成了代码。
4、我学习的时候看到了别人分享的资料和代码得到帮助,省了很多时间。
同样我也自己写博客分享我的代码、思路、方法,我认为自己做到了一定的回馈。

5、我看别人的分享,没觉得别人是得瑟。如果你这样认为,那么你是心理投射

6、同理,你咋不吐糟代码不能运行在android ios osx linux 等等系统上?,谈个屁自动化。
咦?对,要考虑有些用户连系统都还没装呢。你们的代码不能在运行没有系统和python的环境上,用户还需要手动安装系统。
所以基于同样的逻辑,显然所有的代码都不是高度自动化。

7、自己写的代码当然是自己用。代码贴出来是因为我想贴出来,不是为了谁能用.
伸手党想要一个完整可用的代码?欠你们的?给钱了吗?能不能用?会不会用?用不用?和我有毛关系?

8、针对你说的第三行,首先,很明显我的代码中用到了requests,其次没有因为不会用而写错代码,然后我强烈解释过代码写成这样是因为我想要写成这样,我没有说不用会。所以很明显,你们不需要向我解释哪句代码是必要的,应该如何做。
代码我自己写的,我还需要你们来教我如何做?显而易见的废话,你们还需要再重复几次?

“二十多年前,我早做过2+3这样的题目了。”
这句话重点意思是我已经学会2+3=5了,你不需要再向我解释了。
重点并不是比谁先做过什么。
这位宝宝,你明白了吗?


9、我身高1米65,和别人一比就能明显知道谁比我高,谁比我矮。
智商虽然不是外表客观的能看得出来的,其道理也是相同的。
我是低学历人群,智商不太高,我能学会requests,说明requests是简单的,不怎么难。
我能想明白的简单道理,有谁想不明白的话,哈哈哈哈哈哈哈哈。

10、请版主不要删本贴。这样帖子是为了避免同样类似的争论。
2016-6-12 06:22
0
雪    币: 208
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
谢谢楼主  我才黄金会员 是不是需要至尊才可以下所有资源?
2016-6-12 19:39
0
雪    币: 208
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
请问一下 我的用户名是汉字  
每天签到时,存的全是拼音 不是汉字,这样是不是不行呀?
解决方法是什么呀?
谢谢
2016-6-12 19:43
0
雪    币: 168
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
我都在kat.cr下资料,很少在人人下,

所以我还不知道人人的等级有多大用处。

你是说的英文问题,意思是你用了我的程序?zmlog.txt全是英文?可以把代码里的zmlog.txt改zmlog.html

zmlog只是用作日志记录。没什么用,不影响。

话说你看雪帐号好NB啊。uid 306
论坛始祖级的人物。
2016-6-13 00:51
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
感觉楼主是个心理素质非常脆弱,容不得任何人说一点点自己不喜欢听的话,网站自动登录签到自动注册这些东西本来就不是什么有技术含量的东西,何必把自己装的那么清高,别人都是宝宝,都是傻B,还说什么反馈别人.另外我想说一句,从cookie里面取数据登录,真是极其愚蠢的做法!呵呵,原谅我用了这个词,但我觉得只有这个词才准确!
2016-6-15 12:54
0
雪    币: 168
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17


自己站进来的这位傻宝宝。。。。。大长篇写得很清楚了。

你明明看过还来再让我重复一次?

你脑子里想的都是些什么啊?你13年注册到现没发过原创,觉得我清高?

说没技术含量这个我同意,很学多东西我在学会之后都觉得简单,不愿意多说,我好些博客我直接只贴代码。

gotohell:感觉楼主是个心理素质非常脆弱,容不得任何人说一点点自己不喜欢听的话,网站自动登录签到自动注册这些东西本来就不是什么有技术含量的东西,何必把自己装的那么清高,别人都是宝宝,都是傻B,还说什么反馈别人.另外我想说一句,从cookie里面取数据登录,真是极其愚蠢的做法!呵呵,原谅我用了这个词,但我觉得只有这个词才准确!



最后,实际上反而是你的评论没有任何价值,只能给到别人增添困扰。另一边你又在张口闭口谈技术含量。

我在这里提供一些信息:

1、这个论坛里有几篇文章是写读取浏览器cookies的,有IE 火狐之类的

2、我之前写的博客里也有写了读取cookies的用途和目的

3、有两个python库 是专门用来读取浏览器cookies的,pycookiecheat 和 browsercookie

4、读取cookies和添加任务计划的这套代码我前前后后在不同的脚本里重用好多次,读取cookies好与不好的地方,我自己很清楚。不是你以为的就如何的结论。

5、这位傻宝宝我看好你。
2016-6-15 15:04
0
游客
登录 | 注册 方可回帖
返回
//