tpl

python实现秒杀商品的微信提醒

无人久伴 提交于 2020-11-18 20:32:43
技术实现原理:获取京东的具体的商品信息,然后再使用微信发送提醒 工具:需要两个微信号,这两个微信号互为好友 Step1 收集自己想要的商品url 我们就以京东来举例,获取京东的秒杀商品信息: 首先,我们在网页上打开京东,搜索我们想要的商品,这边我就以我最近买的东西为例子: 我们需要找到它的商品信息,需要打开浏览器的开发者模式,之后我们需要选择自己的配送地址,这个时候里面就发送一些接口请求: 我们选择一个有用的商品信息接口: 找到自己想要商品的信息接口,来判断它是否有货: 一般规则是:如果这个接口书籍里面有“无货”的字符信息,那就是缺货状态,否则就是有货状态,可以发送商品链接,进行购买。 我们现在已经成功获取到了商品的url信息,接下来就是设置微信了。 Step2 设置微信通知 微信通知我们需要两个微信号,一个作为发送方,一个作为接受方,这个两个账号需要互为好友。 注意:作为发送方的微信可能会有注册时间要求(微信好像设立了规则:如果晚于某一时间段注册的账号将不再具备网页微信登陆功能) 这边我们使用itchat模块进行模拟微信登陆: import itchat itchat.auto_login( hotReload = True ) hotload参数设置为True可以记住第一次登陆的状态,下一次就不需要扫码登陆了。 执行以上代码可以生成登陆二维码,你只需要扫码登陆就可以了。

日志系统新贵Loki,确实比笨重的ELK轻

ぃ、小莉子 提交于 2020-11-09 05:16:47
点击 上方蓝字把我设为 星标 吧 ! 作者:inkt1234 来源:https://blog.csdn.net/Linkthaha/article/details/100575278 阿面和你一起读: 作为程序员,在技术更新迭代很快的情况下,我们一般的处理都是学它,日志系统又是必不可少的,文本介绍日志系统Loki,大家可以看看是不是多了一种选择呢~ 正文 目录: 背景和动机 ELK存在的问题 成本 整体架构 读写 可扩展性 最近,在对公司容器云的日志方案进行设计的时候,发现主流的ELK或者EFK比较重,再加上现阶段对于ES复杂的搜索功能很多都用不上最终选择了Grafana开源的Loki日志系统,下面介绍下Loki的背景。 背景和动机 当我们的容器云运行的应用或者某个节点出现问题了,解决思路应该如下: 我们的监控使用的是基于prometheus体系进行改造的,prometheus中比较重要的是metric和alert,metric是来说明当前或者历史达到了某个值,alert设置metric达到某个特定的基数触发了告警,但是这些信息明显是不够的。我们都知道,k8s的基本单位是pod,pod把日志输出到stdout和stderr,平时有什么问题我们通常在界面或者通过命令查看相关的日志,举个例子:当我们的某个pod的内存变得很大,触发了我们的alert,这个时候管理员

FastJson 又被爆出漏洞,是时候抛弃了

独自空忆成欢 提交于 2020-11-01 06:24:26
点击“ 开发者技术前线 ”,选择“星标🔝” 在看|星标|留言, 真爱 链接 :urlify.cn/iYN3Uj 回 复“666” 获取一份专属大礼包 2020年05月28日, 360CERT监测发现业内安全厂商发布了Fastjson远程代码执行漏洞的风险通告,漏洞等级:高危。 Fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。 Fastjson存在远程代码执行漏洞,autotype开关的限制可以被绕过,链式的反序列化攻击者精心构造反序列化利用链,最终达成远程命令执行的后果。此漏洞本身无法绕过Fastjson的黑名单限制,需要配合不在黑名单中的反序列化利用链才能完成完整的漏洞利用。 截止到漏洞通告发布,官方还未发布1.2.69版本,360CERT建议广大用户及时关注官方更新通告,做好资产自查,同时根据临时修复建议进行安全加固,以免遭受黑客攻击。 0x02 风险等级 360CERT对该漏洞的评定结果如下 评定方式 等级 威胁等级 【高危】 影响面 【广泛】 0x03 影响版本 Fastjson:<= 1.2.68 0x04 修复建议 临时修补建议: 升级到Fastjson 1.2.68版本,通过配置以下参数开启 SafeMode 来防护攻击

一文看懂 YAML

大憨熊 提交于 2020-10-29 14:26:13
前言 YAML 并不是一种新奇的语言,YAML 首次发表于 2001 年,距离现在已经过去差不多 20 个年头。YAML 虽然不如 JSON、XML 之类的语言流行,应用也没有那么广泛,但是 YAML 也有它的优势。 互联网上的关于 YAML 的文章虽然不多,但也足以让人了解这一款语言,那我为什么还要写这一片入门文章呢? 我认为现有的文章有以下几点不足: - 内容碎片化,阅读起来不够流畅 - 讲解较为生硬,阅读起来比较费劲 - 缺少对比,难以让人快速理解 所以本篇文章的主要目的就是让读者能够快速并准确地了解这款语言,事不宜迟,让我们开始吧! > 为了帮助理解,我将在文中穿插相对应的 JSON 格式的内容作为对比。 > 可能是东半球最通俗易懂的 YAML 中文讲解之一(手动狗头) 简介 YAML 是一种较为人性化的 数据序列化语言 ,可以配合目前大多数编程语言使用。 YAML 的语法比较简洁直观,特点是使用空格来表达层次结构,其最大优势在于 数据结构 方面的表达,所以 YAML 更多应用于 编写配置文件 ,其文件一般以 .yml 为后缀。 > YAML 目前的官方全称为 “ YAML Ain't Markup Language (YAML 不是标记语言)”,但 有意思的是 ,其实 YAML 最初的含义是 “ Yet Another Markup Language (还是一种标记语言)

5.数据交换之网页输出显示(beego)

自古美人都是妖i 提交于 2020-10-04 10:22:09
5.数据交换之网页输出显示 文章目录 5.数据交换之网页输出显示 1、beego 采用了 Go 语言默认的模板引擎 2、设置模板路径: 3、当然我们不需要模板输出的,比如我们只写接口,我们可以手动关闭模板渲染 4、使用`.`来访问当前位置的上下文 4.1、 结构体数据渲染: 4.2、 数组数据渲染: 4.3、 map数据渲染: 4.4、 结构体和map组合渲染: 4.5、切片数据渲染: 1、beego 采用了 Go 语言默认的模板引擎 指定模板:c.TplName = “index.tpl” 默认支持 tpl 和 html beego.AddTemplateExt设置其他后缀 beego.AddTemplateExt(“后缀名”) 如果不设置该参数,那么默认会去到模板目录的 Controller<方法名>.tpl 查找, 例如上面的方法会找 maincontroller/get.tpl 数据渲染:c.Data[“Website”] = “beego.me” 前端获取数据:{ {.Website } } 两个换括号中变量名前有个点,这个点表示当前对象 2、设置模板路径: beego默认的路径是view,可以自己设置 重新设置模板路径: beego.SetViewsPath(“testview”) 配置文件中设置: viewspath = “myview” 3、当然我们不需要模板输出的

c#多线程总结(纯干货)

我们两清 提交于 2020-08-19 00:49:01
线程基础 创建线程 static void Main( string [] args) { Thread t = new Thread(PrintNumbers); t.Start(); // 线程开始执行 PrintNumbers(); Console.ReadKey(); } static void PrintNumbers() { Console.WriteLine( " Starting... " ); for ( int i = 1 ; i < 10 ; i++ ) { Console.WriteLine(i); } } View Code 暂停线程 class Program { static void Main( string [] args) { Thread t = new Thread(PrintNumbersWithDelay); t.Start(); PrintNumbers(); Console.ReadKey(); } static void PrintNumbers() { Console.WriteLine( " Starting... " ); for ( int i = 1 ; i < 10 ; i++ ) { Console.WriteLine(i); } } static void PrintNumbersWithDelay() {

xpath定位中详解id 、starts-with、contains、text()和last() 的用法

隐身守侯 提交于 2020-08-18 05:33:38
1、XPATH使用方法 使用XPATH有如下几种方法定位元素(相比CSS选择器,方法稍微多一点): a、通过绝对路径定位元素(不推荐!) WebElement ele = driver.findElement(By.xpath("html/body/div/form/input" )); b、通过相对路径定位元素 WebElement ele = driver.findElement(By.xpath("//input" )); c、使用索引定位元素 WebElement ele = driver.findElement(By.xpath("//input[4]" )); d、使用XPATH及属性值定位元素 WebElement ele = driver.findElement(By.xpath("//input[@id='fuck']" )); // 其他方法(看字面意思应该能理解吧) WebElement ele = driver.findElement(By.xpath("//input[@type='submit'][@name='fuck']" )); WebElement ele = driver.findElement(By.xpath("//input[@type='submit' and @name='fuck']" )); WebElement ele =

用Python发一封图文并茂的邮件 荐

有些话、适合烂在心里 提交于 2020-08-16 04:00:34
环境 虽说就发邮件这么个小事,很容易兼容Python2, Python3, 但是大家还是拥抱Python3吧, 我这里没有做python2的兼容写法,所以需要python3以上。 很多人学习python,不知道从何学起。 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。 很多已经做案例的人,却不知道如何去学习更加高深的知识。 那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码! QQ群:1097524789 邮件的格式 邮件的格式主要就两种: plain和html plain就像一个普通的文本, 没有格式。 html就如其名, 是html的格式,相当于一个邮件就是一个 静态 的网页,这样的话可玩性就很高了,你可以通过css控制表现形式. 注意: 这里的css虽然语法一样,但,是否与浏览器渲染结果完全一致, 是不一定的。 那么可能有人要问了,我要发一个动态的网页怎么办? 发个链接呀 邮箱账号 无论是QQ邮箱抑或网易邮箱都是没有问题的,重要的是有一个可以通过smtp服务器发送邮件的账户名及密码,这里大家百度吧。 发送邮件的代码 因为发送邮件的代码在下面每个步骤都是一样的所以线贴出来 def send_email(msg, mail_to, smtp_host, smtp_username, smtp_password,

前端也要懂物理 —— 惯性滚动篇

时光总嘲笑我的痴心妄想 提交于 2020-08-13 04:20:22
我们在平时编程开发时,除了需要关注技术实现、算法、代码效率等因素之外,更要把所学到的学科知识(如物理学、理论数学等等)灵活应用,毕竟理论和实践相辅相成、密不可分,这无论是对于我们的方案选型、还是技术实践理解都有非常大的帮助。今天就让我们一起来回顾中学物理知识,并灵活运用到惯性滚动的动效实现当中。 惯性滚动 (也叫 滚动回弹 , momentum-based scrolling )最早是出现在 iOS 系统中,是指 当用户在终端上滑动页面然后把手指挪开,页面不会马上停下而是继续保持一定时间的滚动效果,并且滚动的速度和持续时间是与滑动手势的强烈程度成正比 。抽象地理解,就像高速行驶的列车制动后依然会往前行驶一段距离才会最终停下。而且在 iOS 系统中,当页面滚动到顶/底部时,还有可能触发 “回弹” 的效果。这里录制了微信 APP 【账单】页面中的 iOS 原生时间选择器的惯性滚动效果: 熟悉 CSS 开发的同学或许会知道,在 Safari 浏览器中有这样一条 CSS 规则: 1 -webkit-overflow-scrolling : touch ; 当其样式值为 touch 时,浏览器会使用具有回弹效果的滚动, 即“当手指从触摸屏上移开,内容会继续保持一段时间的滚动效果”。除此之外,在丰富多姿的 web 前端生态中,很多经典组件的交互都一定程度地沿用了惯性滚动的效果

python 利用jinja2模板生成html代码实例

落花浮王杯 提交于 2020-08-11 21:34:59
这篇文章主要介绍了python 利用jinja2模板生成html代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 from jinja2 import Environment, FileSystemLoader import json def generate_html(data): env = Environment(loader = FileSystemLoader( './' )) # 加载模板 template = env.get_template( '模板.html' ) # template.stream(body).dump('result.html', 'utf-8') with open ( "result.html" , 'w' ) as fout: html_content = template.render(data = {}) fout.write(html_content) # 写入模板 生成html if __name__ = = "__main__" : result = {} generate_html(result) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18