闯越自动签到demo版补充说明

2019-07-24 09:05:55来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

demo代码:https://www.cnblogs.com/canmeng/p/11000548.html

定位出错是由于cookie 我重新登录账号过,cookies的值就变了

当时没注意cookie的值变化,然而定位参数回复仍然回复成功

{"state":1,"meg":"成功","result":{}}

至于获取cookie可以参考https://www.cnblogs.com/fengpingfan/p/4759671.html

保存文件名为cookie.txt 

格式化为

key=value;key=value;key=value;

提交写入日志后,cookies添加了一个类似这样子的值

wLog_interContent=2019-06-25%0d%0a%e6%97%a0%e4%ba%ba%e5%80%bc%e5%ae%88%0d%0a%e6%af%8f%e6%97%a5%e6%97%a5%e5%bf%97;wLog_InternStateId=3;wLog_logImg=;wLog_newlogImg=;wLog_posAddress=;wLog_posLong=;wLog_posLati=;

根据上面的情况,改进代码如下
#! /usr/bin/python3
# -*- coding:UTF-8 -*-
# time : 2019/5/19  20:53
# file : requestforCH.py
# By 卤蛋
from urllib.parse import quote
import datetime
import requests
import calendar
import sys
import time
import random
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

request = requests.session()

d = datetime.datetime.now()

StateId = 3

index_html = __file__.replace("requestforCH.py", "") + "index.html"

UserAgent_list = [r"Mozilla/5.0 (Linux; Android 8.1.0; Redmi 6 Build/O11019; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.99 Mobile Safari/537.36",
                  r"Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19",
                  r"Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
                  r"Mozilla/5.0 (Linux; U; Android 6.2; en-gb; GT-P1000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"]

with open(__file__.replace("requestforCH.py", "") + r'cookie.txt', 'r') as file:
    cookie = file.read()
cookies = {}  # 初始化cookies字典变量
for line in cookie.split(';'):  # 按照字符:进行划分读取
    # 其设置为1就会把字符串拆分成2份
    name, value = line.strip().split('=', 1)
    cookies[name] = value  # 为字典cookies添加内容

random_num = random.randint(0, len(UserAgent_list)-1)


def UserAgent():
    #return UserAgent_list[random_num]
    return UserAgent_list[0]


def locationStateAdd(userid):
    headers = {
        "Content-Type": "application/x-www-form-urlencoded",
        "Host": "sqg.cydgsx.com",
        "Connection": "Keep-Alive",
        "Accept-Encoding": "gzip",
        "User-Agent": "okhttp/3.10.0",
    }
    data = {"params": str({"state": StateId, "user_id": userid})}
    response = request.get(
        url="https://sqg.cydgsx.com/locationStateAdd",
        headers=headers,
        data=data,
        timeout=60,
        verify=False)
    return response.json()


def studentLocationAdd(userid):
    headers = {
        "Content-Type": "application/x-www-form-urlencoded",
        "Host": "sqg.cydgsx.com",
        "Connection": "Keep-Alive",
        "Accept-Encoding": "gzip",
        "User-Agent": r"okhttp/3.10.0",
    }
    data = {"params": '{"address":"中国广东省广州市海珠区","latitude":"23.09610289210092","longitude":"113.33666163412784","user_id":%s}' % userid}
    response = request.post(
        url="https://sqg.cydgsx.com/studentLocationAdd",
        data=data,
        headers=headers,
        timeout=60,
        verify=False)
    print("定位:",response.text)
    for key, value in response.json().items():
        if value == "成功" and key == "meg":
            return True
    return False


def Index(url="https://sqg.cydgsx.com/m/s/log/Index",cookie_dict={}):
    headers = {
        "Host": "sqg.cydgsx.com",
        "Connection": "keep-alive",
        "Upgrade-Insecure-Requests": "1",
        "User-Agent": UserAgent(),
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "Referer": url,
        "Accept-Encoding": "gzip, deflate",
        "Accept-Language": "zh-CN,en-US;q=0.9",
        "X-Requested-With": "com.gcykj.boss",
    }
    temp_cookies = cookies.copy()
    temp_cookies.update(cookie_dict)
    response = request.get(
        url=url,
        headers=headers,
        cookies=temp_cookies,
        timeout=60,
        verify=False)
    html = response.text.replace('href="', 'href="https://sqg.cydgsx.com').replace("'get','", "'get','https://sqg.cydgsx.com").replace(r'src="', 'src="https://sqg.cydgsx.com')
    with open(index_html, "w", encoding='utf-8') as file:
        file.write(html)
    print(locationStateAdd(cookies["LoginUser_Id"].split("&")[0]))  # 等待服务器添加定位
    return studentLocationAdd(cookies["LoginUser_Id"].split("&")[0])  # 添加定位


def day(string=d.strftime('%Y-%m-%d')):

    if d.day == getMonthFirstDayAndLastDay()[1].day:
        month(d.strftime('%Y-%m-%d') + "\n无人值守\n" + "每月小结")
    elif d.weekday() == 6:
        week(d.strftime('%Y-%m-%d') + "\n无人值守\n" + "每周周报")
    headers = {
        "Host": "sqg.cydgsx.com",
        "User-Agent": UserAgent(),
        "Referer": "https://sqg.cydgsx.com/m/s/log/wLog",
        "Accept-Encoding": "gzip, deflate",
        "Accept-Language": "zh-CN,en-US;q=0.9",
        "Accept": "application/json",
        "Origin": "https://sqg.cydgsx.com",
        "X-Requested-With": "XMLHttpRequest",
        "Connection": "keep-alive",
        "Content-Type": "application/x-www-form-urlencoded"
    }

    data = {"InternStateId": StateId,
            "interContent": quote(string, 'utf-8'),
            "logImg": "",
            "newlogImg": "",
            "posAddress": "",
            "posLong": "",
            "posLati": ""}
    response = request.post(
        url="https://sqg.cydgsx.com/m/s/Log/SaveWriteLog",
        data=data,
        headers=headers,
        cookies=cookies,
        timeout=60,
        verify=False)
    print("cookies: ",response.cookies.items())
    for key, value in response.json().items():
        if value == "成功" and key == "meg":
            print("每日小结: ",response.json())
            return True
    return False


def week(string=d.strftime('%Y-%m-%d')):
    if d.weekday() != 6:
        return False
    else:
        headers = {
            "Host": "sqg.cydgsx.com",
            "Connection": "keep-alive",
            "Accept": "application/json",
            "Origin": "https://sqg.cydgsx.com",
            "X-Requested-With": "XMLHttpRequest",
            "User-Agent": UserAgent(),
            "Content-Type": "application/x-www-form-urlencoded",
            "Referer": "https://sqg.cydgsx.com/m/s/log/wWeekSmy?date={}".format(d.strftime('%Y-%m-%d')),
            "Accept-Encoding": "gzip, deflate",
            "Accept-Language": "zh-CN,en-US;q=0.9",
        }
        data = {
            "summaryInfo": string,
            "logImg": "",
            "newlogImg": "",
            "smyDate": quote(d.strftime('%Y/%m/%d'),
                             'utf-8').replace("2F05%",
                                              "2F5%") + "+" + quote("0:00:00", 'utf-8'),
            "summaryType": "周小结",
        }
        response = request.post(
            url="https://sqg.cydgsx.com/m/s/Log/SaveSmyJson",
            data=data,
            headers=headers,
            cookies=cookies,
            timeout=60,
            verify=False)

        for key, value in response.json().items():
            if value == "成功" and key == "meg":
                print("每周小结: ",response.json())
                return True
    return False


def month(string=d.strftime('%Y-%m-%d')):
    if d.day != getMonthFirstDayAndLastDay()[1].day:
        return False
    else:
        headers = {
            "Host": "sqg.cydgsx.com",
            "Connection": "keep-alive",
            "Accept": "application/json",
            "Origin": "https://sqg.cydgsx.com",
            "X-Requested-With": "XMLHttpRequest",
            "User-Agent": UserAgent(),
            "Content-Type": "application/x-www-form-urlencoded",
            "Referer": "https://sqg.cydgsx.com/m/s/log/wMonthSmy?date={}".format(d.strftime('%Y-%m-%d')),
            "Accept-Encoding": "gzip, deflate",
            "Accept-Language": "zh-CN,en-US;q=0.9",
        }

        data = {
            "summaryInfo": string,
            "logImg": "",
            "newlogImg": "",
            "smyDate": quote(d.strftime('%Y/%m/%d'),
                             'utf-8').replace("%2F0", "%2F") + "+" + quote("22:32:00", 'utf-8'),
            "summaryType": "月小结",
        }
        response = request.post(
            url="https://sqg.cydgsx.com/m/s/Log/SaveSmyJson",
            data=data,
            headers=headers,
            cookies=cookies,
            timeout=60,
            verify=False)

        for key, value in response.json().items():
            if value == "成功" and key == "meg":
                print("每月小结: ",response.json())
                return True
    return False


def getMonthFirstDayAndLastDay(year=None, month=None):
    if year:
        year = int(year)
    else:
        year = datetime.date.today().year

    if month:
        month = int(month)
    else:
        month = datetime.date.today().month

    firstDayWeekDay, monthRange = calendar.monthrange(year, month)

    return [
        datetime.date(
            year=year,
            month=month,
            day=1),
        datetime.date(
            year=year,
            month=month,
            day=monthRange)]


def main(data=""):
    def setLog(data):
        if sys.argv[1] == "day":
            return day(data + "每日日志")
        elif sys.argv[1] == "week":
            return week(data + "每周周报")
        elif sys.argv[1] == "month":
            return month(data + "每月小结")
    if len(sys.argv) > 2:
        return setLog("".join(sys.argv[2:]))
    elif len(sys.argv) > 1:
        return setLog(data)
    else:
        return day(data + "每日日志")


if __name__ == '__main__':
    print("##"*20)
    # Index("https://sqg.cydgsx.com/m/s/Home/Index")
    if main(d.strftime('%Y-%m-%d') + "\n无人值守\n"):
        print(d.strftime('%Y-%m-%d %H:%M:%S') + "\t成功写入日志")
        temp_dict = {"wLog_interContent":quote(d.strftime('%Y-%m-%d') + "\n无人值守\n每日日志", 'utf-8')}
        temp_dict["wLog_InternStateId"] = str(StateId)
        temp_dict["wLog_logImg"] = ""
        temp_dict["wLog_newlogImg"] = ""
        temp_dict["wLog_posAddress"] = ""
        temp_dict["wLog_posLong"] = ""
        temp_dict["wLog_posLati"] = ""
        print(Index("https://sqg.cydgsx.com/m/s/log/Index",temp_dict))
    else:
        print(d.strftime('%Y-%m-%d %H:%M:%S') + "\n写入日志失败")
    print("==" * 20 + "\n闯越自动写日志系统(更新版)\tBy:卤蛋 \n2019.05.20·06.25\n" + "==" * 20)
    print("##"*20)

原文链接:https://www.cnblogs.com/canmeng/p/11082806.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:python 之 random 模块、 shutil 模块、shelve模块、 xml模块

下一篇:SQLAlchemy简介