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


    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)
  • 相关阅读:
    synchronized介绍
    volatile介绍
    docker开启远程访问
    docker时间同步解决办法
    spring boot集成docker
    vue踩坑-Error: listen EADDRNOTAVAIL 192.168.1.122:8081
    大前端(全栈)学习路线指南
    做前端技术方案选型的时候,你是怎么做决策的?
    小程序源码丢失了怎么在微信平台反编译找回
    做前端技术方案选型的时候,你是怎么做决策的?
  • 原文地址:https://www.cnblogs.com/wananonline/p/11082806.html
Copyright © 2020-2023  润新知