python实现软件登陆过程中的试用时间校验(网络时间和本地时间双校验)
# !/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@des :"""
import requests
from lxml import etree
import re
import datetimedef get_standard_html(retry_times=3):"""网络获取标准北京时间HTML:param retry_times::return:"""flag = Falseresponse = ""while not flag and retry_times > 0:try:headers = {"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7","Cache-Control": "no-cache","Connection": "keep-alive","DNT": "1","Pragma": "no-cache","Referer": "https://www.baidu.com/link?url=P5aQMA4XN6hQMNXgWTAKtPCSGG52KlhztMU78ERAT3KS3pixUFfh2loQ4dUgCQZ0&wd=&eqid=d2bcf4ac0001cb160000000263295be3","Upgrade-Insecure-Requests": "1","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"}url = "http://time.tianqi.com/"response = requests.get(url, headers=headers, verify=False)comp = re.compile("charset=(.*)")encod = re.search(comp, response.text)response.encoding = encodflag = Trueexcept Exception as e:retry_times -= 1return responsedef parse_text(res):"""解析标准北京时间:param res::return:"""tree = etree.HTML(res)lis = tree.xpath('//div[@class="time_box_detailinfo"]')for li in lis:net_time_lis = li.xpath('./div[@class="time_date"]/div[1]/p/text()')computer_time = li.xpath('./div[@class="detail_info"]/p[5]/span[@class="computed_time"]/text()')if len(computer_time) == 1:computer_time = computer_time[0]net_time_head = computer_time.split(" ")[0]if len(net_time_lis) == 3:net_time = "{} {}:{}:{}".format(net_time_head, net_time_lis[0], net_time_lis[1], net_time_lis[2])return net_time, computer_timedef time_str_datatime_obj(time_str: str):"""字符串形式时间转换成datetime.datetime:param time_str::return:"""return datetime.datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S")def match_time(register_time: str, net_time_now: str,local_time=datetime.datetime.now(),TrialTime=30):"""计算时间差:param register_time::param net_time_now::param local_time::return:"""# 校验网络时间和本地时间if local_time.strftime("%Y-%m-%d %H:%M:%S") == net_time_now:register_time_obj = time_str_datatime_obj(register_time)net_time_now_obj = time_str_datatime_obj(net_time_now)# 计算时间差值diff_days_net = (net_time_now_obj - register_time_obj).daysif diff_days_net > TrialTime:flag = 2elif diff_days_net < 0:flag = 3else:flag = 0else:flag = 4return flagif __name__ == '__main__':match_dic = {0: "试用期内",2: "试用过期",3: "注册时间大于当前时间",4: "网络时间获取异常/本地时间不正确"}res_txt = get_standard_html()if res_txt != "":net_time, computer_time = parse_text(res_txt.text)register_time = "2022-7-01 19:01:00"status_code = match_time(register_time, net_time)print(match_dic[status_code])else:print("网络错误")
python实现软件登陆过程中的试用时间校验(网络时间和本地时间双校验)相关推荐
- 常用软件-安装过程中的小常识
常用软件-安装过程中的小常识 主要通过安装金山打字通软件,来讲解我自己安装程序中用到的小技巧. (只适用于电脑小白奥) 完整安装过程 如下是安装金山打字通的完整过程,讲解了我自己的常用小技巧. 1. ...
- 软件重构过程中的思维转换: 遗留代码如何变废为宝
"我开始收到各式各样的邮件,人们都表示'天呐!我也是这样!'."她说,"我开始去传播这条信息,告诉大家重新建构遗留代码这件事其实非常有价值,凭此来吸引合适的人." ...
- 我们编写的python代码在运行过程中_在Rust代码中编写Python是种怎样的体验?
原标题:在Rust代码中编写Python是种怎样的体验? 作者 | Mara Bos,Rust资深工程师 译者 | Arvin,编辑 | 屠敏 来源 | CSDN(ID:CSDNnews) 大约一年前 ...
- 软件设计过程中的诱惑
在软件设计的过程中,我们经常会面临这样的诱惑: 在工作过程中,突然出现了一个问题如鲠在喉,阻塞住了当前整个的工作进度, 而同时,你立刻能够想到一个快速搞定该问题的方案,这种情形下开发人员,很 容易就会 ...
- html判断cookies ph,【教程】如何利用IE9的F12去分析网站登陆过程中的复杂的(参数,cookie等)值(的来源)...
在抓取网站内容,模拟网站登陆等过程中: 往往要去分析某些变量,参数,某cookie的值的来源. 而想要分析单个的值,相对于从F12所抓取到的海量信息,即N多条的记录,且每天记录中有N多数据信息,来说, ...
- Python入门--函数传递过程中实参的变化
def fun(arg1,arg2):print('arg1=',arg1)print('arg2=', arg2)arg1=100;arg2.append(10)print('arg1=', arg ...
- python获取本地时间_Python实例讲解 -- 获取本地时间日期(日期计算)
#! /usr/bin/env python #coding=utf-8 import time print time.strftime('%Y-%m-%d %A %X %Z',time.localt ...
- Python Pycharm在运行过程中,查看每个变量(show variables)
MATLAB里面有一个很贴心的功能就是你可以随时查看变量的值,以及变量的类型是什么: 在进行代码调试的时候,可以清楚的看到是哪些值出现了问题,但是由于MATLAB的深度学习生态环境还是没有Python ...
- 1-1 软件构造过程中的多维视图
本节目标: 本节大纲: 随着时间的推移,人们对软件的认识的变化: 软件不能脱离外部环境: 软件构造的多个维度: 时间:瞬时(某一天某个时间点).周期(变化情况) 编码:构建开发(代码的结构.多少类.类 ...
最新文章
- 如何在不增加人员的情况下自动化API安全程序
- Flask框架——ORM数据库
- 七、配置ssh keys连通github跟ssh-agent
- Thrift实现C#调用Java开发步骤详解
- 查看有哪些表被锁住 如何杀死oracle死锁进程
- ASP.NET MVC 小小总结
- 性能测试负载模型(八)
- 自定义Promise
- 5分钟实现微信云小程序支付功能(含源码)
- Python ADF 单位根检验 如何查看结果
- 计算机基础——4.1 数字通信入门
- doors需求管理导入HTML,如何利用doors进行需求管理
- 先决条件(一)问题定义和需求分析
- laydate时间控件 (开始日期、结束日期)
- html5网页制作心得体会,网页设计课程学习心得总结
- 乔治亚大学计算机科学,乔治亚大学的计算机科学排名,真得稳重考察
- Bluetooth core 5.0 Generic Access Profile ---------- 模式 - BR/EDR 物理传输(physical transport)
- 浅谈程序环境和预处理
- ART/Dalvik,JVM/Dalvik 虚拟机的区别
- jlink 固件升级
热门文章
- 如何在 Linux 下安装及使用 CD-ROM
- iview 级联选择组件_iviewui级联选择 如何自定义?
- 弘辽科技:淘宝平台如何处理商家sku作弊问题?有哪些处罚?
- Visa和Planeta Informatica开拓新技术,助力全球交通运输运营商实现快速、安全、便捷的非接触式支付
- php java内存占用_PHP内存溢出优化代码详解
- 微信小程序——weapp-qrcode.js生成二维码、海报二维码、核销码
- 麦积机器人_智能机器人到来,这一批会计人员即将下岗!
- 如何找到英文文档读懂英文文档
- 对于一个字符串,找到第一次重复出现的字符
- 员工一言不合就离职怎么办?我用 Python 写了个员工流失预测模型