阿里、腾讯云函数/亚马逊Lambda函数签到+qq推送签到结果(可选)
本帖最后由 mikeee 于 2020-10-19 00:51 编辑import re
import requests
import logging
FORMAT = '%(name)s-%(filename)s'
# FORMAT += '%(asctime)s:'
FORMAT += '%(levelname)s:\n\t%(message)s'
logger = logging.getLogger()
logging.basicConfig(format=FORMAT, level=10)
UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17"
HEADERS = {"User-Agent": UA}
# 运行 get-cookies.exe 后将系统剪贴板内容拷到下面的等号后面
ck_dict = {}
# ck_dict = {"KF4": "FQV091", "_uab_collina": "1552...4", "htVD_213 2_atarget": "1", "htVD_2132_auth": "9c74BfB5ixjxX..."}
# 或用其他方法,例如devtools 或 fiddler4 获取52pojie的cookies
if not ck_dict:
ck_str = ""# 拷到引号里面
# ck_str = "_uab...1322"
HEADERS.update({"Cookie": ck_str.strip()})
# https://cp.xuthus.cc/ 申请key 并设置测试好酷推
xuthuskey = ""
# xuthuskey = "27a...........................7b"
def main():
cjar = requests.utils.cookiejar_from_dict(ck_dict)
url = "https://www.52pojie.cn/home.php?mod=task&do=draw&id=2"
# 不是进行中的任务
logger.info("main...")
def fetch(url):
try:
# res = pq(httpx.get(url, cookies=ck_dict).text)("#messagetext")("p").text()
resp = requests.get(url, cookies=cjar, headers=HEADERS)
except Exception as exc:
# raise SystemExit(exc)
logger.error("exc: %s", exc)
resp = str(exc)
try:
text = resp.text# type: ignore
except Exception as exc:
logger.error("exc: %s", exc)
text = str(exc)
return text
text = fetch(url)
if "wbs.png" not in text:# try url2
url2 = "https://www.52pojie.cn/home.php?mod=task&do=apply&id=2"
text = fetch(url2)
if "您需要先登录" in text:
res = "您需要先登录,可能原因:cookies过期或52破解页面改版"
elif "不是进行中的任务" in text or "您已申请过此任务" in text:
res = "今天签过了,明天再来吧"
else:
res = "".join(re.findall(r"messagetext[\s\S]*?<p>([\s\S]{,105})</p>", text))
logger.info(res)
# try the other url if...
_ = r"""
url = "https://www.52pojie.cn/home.php?mod=task&do=apply&id=2"
text = fetch(url)
if "您需要先登录" in text:
res = "签到失败"
# elif "不是进行中的任务" in text:
elif "您已申请过此任务" in text:
res = "今天签过了,明天再来吧"
else:
res = "".join(re.findall(r"messagetext[\s\S]*?<p>([\s\S]{,105})</p>", text))
print(res)
# """
if not res:
logger.info("text[:200]: %s", text[:200])
res = text[:200]
if xuthuskey.strip():
_ = xuthuskey.strip()
requests.get(f"https://push.xuthus.cc/send/{_}?c=func compute: {res}")
def lambda_handler(event, context):# aws default
print(event)
print(context)
main()
def main_handler(event, context):# tencent default
print(event)
print(context)
main()
def handler(event, context):# aliyun default
print(event)
print(context)
main()
if __name__ == "__main__":
main()
步骤
* 下载: https://pan.baidu.com/s/1gAxEoaqICwQQ2br7ly0SPQ 提取码: cxx8解压后**运行 get-cookies.bat**(拷cookies到系统剪贴板)
* 将系统剪贴板里的cookies拷到17行里 `ck_dict = {}` 取代等号后的`{}`
* 或用其他方法(devtools 或 Fiddler4)拷出 Cookie 置入第22行的 ck_str = "" 等号后面。
* (可选)如希望用qq推送签到后的结果,申请酷推的钥匙序列(参看源码第27行的链接)拷到第28行的等号后面
* 将文件上传到阿里云函数计算或亚马逊lambda函数并设置好触发
也可以传腾讯云,但我没腾讯账户,没测试过。阿里云和腾讯云已含`requests`库,上传文件或拷到在线编辑器里就能用。亚马逊云需用`pip requests -t 目录名`的办法再`zip aws.zip * -r `将上面的`python`文件(`lamnda_function.py`)及`requests`包一起打包上传。签到结果推送qq部分可以改成用server酱推送微信。~~不清楚cookies的有效时间,如果太短的话,那么这个云函数签到就没有太大意义了,因为老是要手动更新cookies。~~ (2020-10-18更新:实测cookies是长期有效,至少从8月中到现在还没有失效过。)注册阿里云、亚马逊云、腾讯云是免费的,但使用云函数则需要提供信用卡信息,不过每个月有足够的免费额运行小项目,运行签到这种自然是绰绰有余。
有其他问题的话跟帖,我知道答案就尽量解答。
纯属学习`python`云函数。版主别罚我。我都是每天来52破解手动签到。如觉得不妥,请删帖。
本帖最后由 mikeee 于 2020-9-1 00:56 编辑
Healer-zx 发表于 2020-9-1 00:30
对的,用Chrome登录
```python
# -*- coding: utf-8 -*-
'''
copy 52pojie cookies (json format) to system clipboard.
'''
from time import sleep
import json
import browser_cookie3
import pyperclip
def dict_from_cookiejar(cj):
"""Returns a key/value dictionary from a CookieJar.
:param cj: CookieJar object to extract cookies from.
:rtype: dict
"""
cookie_dict = {}
for cookie in cj:
cookie_dict = cookie.value
return cookie_dict
def main():
'''copy 52pojie cookies (json format) to system clipboard.'''
# try chrome first
cookies_jar = browser_cookie3.chrome(domain_name="www.52pojie.cn")
# cookies_dict = requests.utils.dict_from_cookiejar(cookies_jar)
cookies_dict = dict_from_cookiejar(cookies_jar)
# try firefox if unsuccessful
if not cookies_dict:
try:
cookies_jar = browser_cookie3.firefox(domain_name="www.52pojie.cn")
# cookies_dict = requests.utils.dict_from_cookiejar(cookies_jar)
cookies_dict = dict_from_cookiejar(cookies_jar)
except Exception as exc:
print(" browser_cookie3.firefox exc: %s" % exc)
print(" Unable to fetch cookies...")
return
if cookies_dict:
cookies_str = json.dumps(cookies_dict)
try:
pyperclip.copy(cookies_str)
print(f'52pojiec cookies({cookies_str[:120]}...)已拷至系统剪贴板。')
except Exception as exc:
print('拷到系统剪贴板出错:%s' % exc)
return
print('未能获取 cookies。')
print('试试先在 Chrome 或 Firefox 浏览器里登录 www.52pojie.cn')
return
if __name__ == '__main__':
main()
sleep(2)
```
hmm……, 不知道什么原因,Chrome版本够新?
有`python`环境的话,试试源码,需装`browser-cookie3`和`pyperclip`包
```bash
pip install browser-cookie3 pyperclip
python get_cookies.py
```
{"errorCode":-1,"errorMessage":"Traceback (most recent call last):\nFile \"/var/runtime/python3/bootstrap.py\", line 133, in init_handler\n func_handler = get_func_handler(file.rsplit(\".\", 1), func)\nFile \"/var/runtime/python3/bootstrap.py\", line 159, in get_func_handler\n mod = imp.load_module(mname, *imp.find_module(mname))\nFile \"/var/lang/python3/lib/python3.6/imp.py\", line 234, in load_module\n return load_source(name, filename, file)\nFile \"/var/lang/python3/lib/python3.6/imp.py\", line 172, in load_source\n module = _load(spec)\nFile \"Ϗrozen; importlib._bootstrap>\", line 675, in _load\nFile \"Ϗrozen; importlib._bootstrap>\", line 655, in _load_unlocked\nFile \"Ϗrozen; importlib._bootstrap_external>\", line 674, in exec_module\nFile \"Ϗrozen; importlib._bootstrap_external>\", line 781, in get_code\nFile \"Ϗrozen; importlib._bootstrap_external>\", line 741, in source_to_code\nFile \"Ϗrozen; importlib._bootstrap>\", line 205, in _call_with_frames_removed\nFile \"/var/user/index.py\", line 3\n import logging\n ^\nIndentationError: unexpected indent"}
这个提示错误 感谢分享, 感谢楼主的分享 高大上的方法,感谢楼主,学习了. xlose13720 发表于 2020-8-29 15:41
{"errorCode":-1,"errorMessage":"Traceback (most recent call last):\nFile...
"IndentationError: unexpected indent", 貌似缩进不对。你是在哪里运行?本地系统有python环境的话,那个程序在本地也是可以运行的,例如,python lambda_function.py, 也可以在本地用其他工具查错,例如 pyrightlambda_function.py 或 pylint lambda_function.py mikeee 发表于 2020-8-29 15:54
"IndentationError: unexpected indent", 貌似缩进不对。你是在哪里运行?本地系统有python环境的话,那 ...
我是复制来腾讯云的云函数 本帖最后由 mikeee 于 2020-8-29 16:12 编辑
源啊呢哈 发表于 2020-8-29 16:02
运行 get-cookies.exe一闪而过。剪切板也没有
错误
你开个 cmd 窗运行 get-cookies,看看有没有什么信息可以帮助找到剪贴版没有拷出cookies的原因。
在阿里云运行云函数的话,那个 lambda_handler 要改成 main_handler。或是改云函数设置的缺省index.main_handler为 index.lambda_handler. 目的就是要让云函数运行 index.py 里存在的东西。