vlambda博客
学习文章列表

python 通过html的方式判断返回结果

1、先通过命令pip install lxml,安装lxml包(注意:python3.5之后的 lxm 模块l中不能再直接引入etree模块),虽然新版本无法直接”from lxml import etree“这样,但是,它只不过是换了一个办法引出 etree而已,方式如下:

from lxml import html

etree = html.etree

具体使用如下:(定位到数据,复制成xpath方式,在console先验证一遍是否正确,再写代码)

from lianxi_15.login_xadim import login
import requests
import re
from requests_toolbelt import MultipartEncoder
from lxml import html #python3.5之后的 lxm 模块l中不能再直接引入etree模块
etree = html.etree#通过HTML引用出etree
def teacher(s):
'''新增老师'''
login(s)#调用登录函数
url = "http://49.235.92.12:8020/xadmin/hello/teacherman/add/"
r = s.get(url)#刷新或进去该接口,获取隐藏的token,后面表单需要
#name='csrfmiddlewaretoken' value='sTvnp3lpgsAkxVvb4XoPHTCq4EmZoCvkFHpgUl4ZhGZBNY1eqLDRX3NIlBqIbukO'
csrf_token=re.findall("name='csrfmiddlewaretoken' value='(.+?)'",r.text)#正则获取token
print(csrf_token[0])
body = MultipartEncoder(#表单类型的body参数
fields=[
("csrfmiddlewaretoken", csrf_token[0]),
("csrfmiddlewaretoken", csrf_token[0]),
("teacher_name", "lytest333"),
("tel", "123123123"),
("mail", "[email protected]"),
("sex", "M"),
("_save", "")
],
)
r2 = s.post(url, data=body, headers={"Content-Type": body.content_type})#提交接口参数,注意headers需要添加表单类型的请求头
# print(r2.text)
return r2.text

def get_add_res(s):#通过HTML判断数据是否添加成功
res = teacher(s)#调用新增老师的函数
demo = etree.HTML(res)#通过HTML的方法,获取新增后的xml的元素属性
nodes = demo.xpath('//*[@id="changelist-form"]/div[1]/table/tbody/tr[1]/td[2]/a')#通过HTML里的xpath方法,定位到新增的数据
print(nodes[0].text)
get_add = nodes[0].text#nodes[0]是一个元素对象,通过text获取对象的属性
return get_add

if __name__ == '__main__':
s = requests.session()#调用会话
get_add=get_add_res(s)#调用判断数据函数,获取新增后在页面上显示的数据值
print("获取换回结果:%s"%get_add)