刚开始写了一个程序:
每次把这个字符复制过来,然后再把结果粘回去。
后来我发现,手速这个东西,我可能没有。
然后想了想能不能使用python的requests库结合正则表达式来做呢?
答案是肯定的。
由于之前没有接触过requests库,就先看看官方文档。
http://docs.python-requests.org/zh_CN/latest/user/quickstart.html
里面介绍了requests库的requests.get方法和post方法
一般的页面用get和post方法就可以完成,但是在实际使用的时候发现用get和post方法会导致产生两个会话,导致提交无法完成。类似这样:
可以发现两个值的内容完全不一样。
由于了解不够,急于求成没了解自己的需求(个人检讨)
其实在requests库中还有高级用法“会话对象”session实例:
r=requests.Session()通俗理解就是当你和他人谈话的时候可以执行到对话结束。
而使用get和post方法时候每次生成一个新的会话。
http://docs.python-requests.org/zh_CN/latest/user/advanced.html#advanced (高级用法文档)
准备工作完成,接下来就应该分析问题了,我们需要把网页中的计算式提取出来,然后进行运算,运算完将计算结果post出去。
分析网页:
需要将<div name='my_expr'>(9044 + 461) x (6060 - 80) - (793 + 396 - 437) x 979 </div>=?
这个字符串提取出来,使用正则表达式。
模式
|
描述
|
^
|
匹配字符串的开头
|
$
|
匹配字符串的末尾。
|
.
|
匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
|
[...]
|
用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
|
[^...]
|
不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
|
re*
|
匹配0个或多个的表达式。
|
re+
|
匹配1个或多个的表达式。
|
re?
|
匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
|
re{ n}
|
|
re{ n,}
|
精确匹配n个前面表达式。
|
re{ n, m}
|
匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
|
a| b
|
匹配a或b
|
(re)
|
G匹配括号内的表达式,也表示一个组
|
(?imx)
|
正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。
|
(?-imx)
|
正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。
|
(?: re)
|
类似 (...), 但是不表示一个组
|
(?imx: re)
|
在括号中使用i, m, 或 x 可选标志
|
(?-imx: re)
|
在括号中不使用i, m, 或 x 可选标志
|
(?#...)
|
注释.
|
(?= re)
|
前向肯定界定符。如果所含正则表达式,以 ... 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。
|
(?! re)
|
前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功
|
(?> re)
|
匹配的独立模式,省去回溯。
|
\w
|
匹配字母数字
|
\W
|
匹配非字母数字
|
\s
|
匹配任意空白字符,等价于 [\t\n\r\f].
|
\S
|
匹配任意非空字符
|
\d
|
匹配任意数字,等价于 [0-9].
|
\D
|
匹配任意非数字
|
\A
|
匹配字符串开始
|
\Z
|
匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。c
|
\z
|
匹配字符串结束
|
\G
|
匹配最后匹配完成的位置。
|
\b
|
匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
|
\B
|
匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
|
\n, \t, 等.
|
匹配一个换行符。匹配一个制表符。等
|
\1...\9
|
匹配第n个分组的子表达式。
|
\10
|
匹配第n个分组的子表达式,如果它经匹配。否则指的是八进制字符码的表达式。
|
由于提取到的是 * 为 x,需要将计算式中的x替换为*,使用字符串中的replace方法。
str.replace('oldchr','newchar')
替换后字符串就成了:
(9044 + 461) * (6060 - 80) - (793 + 396 - 437) * 979
使用python的eval()函数将字符串进行计算。
得到结果,然后使用以下代码:
payload={"pass_key":d}
e=session.post(url,payload)
encoding='UTF-8'
print(e.text)
调用session方法,将得到的结果post出去。
完整代码如下:
import requests
import re
session = requests.Session()
url='http://ctf5.shiyanbar.com/jia/'
r=session.get(url)
r.raise_for_status()
r.encoding='gb2312'
print(r.text)
key='name=\'my_expr\'>(.*?)</div>'
b="".join(re.findall(key,r.text))
c=b.replace('x','*')
print(c)
d=(eval(c))
print(str(d))
payload={"pass_key":d}
e=session.post(url,payload)
encoding='gb2312'
print(e.text)
运行结果:
得到key。
如有错误希望大家指出!
站在车企的角度看,QNX有点像Mobileye——尽管“易用”,但限制了车企的自主性;而Linux则有点像英伟达——比较“难用”,但赋予了车企很大的自主权及面向未来的兼容性。随着车企对软件...
按照官网给的命令kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml回头查看k8s的运行状态,有一项卡在了这里kubectl get pods -n kube-system显示ImagePullBackOffkube-flann...
建造者模式,对于后端开发人员来说应该是很熟悉的,我们比较常用的HttpClient框架在构建Client时就用到了建造者模式。定义 惯例先来看看建造者模式的定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。UriComponents 可以说建造者模式理解起来是比较的容易的。它就是将复杂类的构建与其本身解耦合,并在其构造类中完成对它不同形式的创建。 在sp...
关于PInvoke 和COM Interop.1. 平台调用 利用平台调用这种服务,托管代码可以调用在动态链接库 (DLL)(如 Win32 API 中的 DLL)中实现的非托管函数。此服务将查找并调用导出的函数,然后根据需要跨越互用边界封送其参数(整数、字符串、数组、结构等)。要封装平台功能,一种有效的方法是将常用的 DLL 函数包装在托管类中。虽然不必在每种情形下都这样做,但...
一、区别1、定义 1)ServletConfig:Servlet的配置对象,容器在初始化Servlet时通过它传递信息给Servlet。 2)ServletContext:上下文对象,提供了一系列方法供Servlet与Web容器交互。2、创建时机 1)ServletConfig:在容器初始化Servlet的时候,并为其提供上下文初始化参数的名/值对的引用。 2)ServletContext:容器启动的时候,并为其提供Servlet初始化参数的名/值...
分页总数计算,根据总记录数获取分页总数int pageSize = 20; //每页记录数量int totalCount = 100005; //总记录数int pageCount; //总页数//方法一:pageCount = (totalCount + pageSize - 1) / pageSize; //推荐写法//方法二:pageCount = (totalCount - ...
showDialog(barrierDismissible: true,//是否点击空白区域关闭对话框,默认为true,可以关闭context: context,builder: (BuildContext context) {var list = List();list.add(‘拍摄照片’);list.add(‘从相册选取’);list.add(‘选择文件’);return ...
输入格式:输入在一行中给出正方形边长 N(3≤N≤20)和组成正方形边的某种字符 C,间隔一个空格。输出格式:输出由给定字符 C 画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的 50%(四舍五入取整)。输入样例:10 a//结尾无空行输出样例:aaaaaaaaaaa aa aa aaaaaaaaaaa//结尾无空行AC程序#include<stdio.h>int
想用到微信公众平台的图片识别系统,结果报错{"errcode":41005,"errmsg":"media data missing hint: [xScHza03164711]"}"代码如下:<?php class getImgSecCheck{function get_data(){ $url = "https://api.weixin.qq.com/wxa/im...
ubuntu 连接wpa2的wifi需要用到工具wpasupplicant启动无线连接获取ip最近在香橙派zero plus上烧录了ubuntu16 server的镜像 因为没有网线口 只能用wifi进行连接一般情况下ubuntu 16是集成了wpa_supplicant工具的我们直接用就好了其配置文件目录 /etc/wpa_supplicant在该文件夹下建立home.conf文件(...
疫情之下,求职就业有多难?谁能想到,2020年开年就飞来一只黑天鹅。如果没有疫情的影响,这个春节本该是大家大肆消费的时节,可因为病毒的快速蔓延,我们只能瑟缩在家中,不能旅游、不能外出聚餐、不能正常上班…没有消费,产品就会滞留,企业日子自然不好过。企业不好过就更别提还招聘员工干活了,辞退和裁员都来不及。1.年年喊的史上最难就业季?今年最惨!根据智联招聘统计最近统计数据显示:今年的企业招聘需求整体呈缩减趋势。从整体招聘规模的变化来看,更多企业将招聘规模调整到10人以下,原本招聘规模在500人以上的企业,
《智能循迹避障小车毕业设计论文.docx》由会员分享,可免费在线阅读全文,更多与《智能循迹避障小车毕业设计论文》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。1、较器来采集高低电平,从而实现信号的检测。避障亦是此原理。电路图如图。市面上有很多红外传感器,在这里我选用TCRT型光电对管。图循迹原理图主控电路本模块主要是对采集信号进行分析,同时给出PWM波控制电机速度,起停...