问答 来练练手!在一个 html 页面中截取一段字符串

Ikaros灬 · 2018年04月26日 · 最后由 wind 回复于 2018年05月18日 · 1919 次阅读

这个是我最近碰到的一个问题,大家也可以当做练手哈。
我们的产品在登录前会从服务器获取到一个 csrf 值,这个值藏在登录页面的 html 代码中。在登录时这个值将作为参数一同提交到服务器上。
现在的问题就是我怎样从整个页面的 html 代码中准确找到这个值。
已知这段 html 的代码固定为

<input type="hidden" name="_csrf" value="12345678-1234-1234-1234-123456781234" />

前后的 html 代码都不确定,value 值每次随机生成,value 长度固定
如何把 value 中的值截取下来。

接下来,秀技的时候到了

共收到 21 条回复 时间 点赞

第一次发布直接粘贴 html 代码还真的给隐藏了。。

document.getElementsByName("_csrf").value

BeNice 回复

不是这个意思哈,拿到的 html 页面已经是一段文本了。。整个页面的 html 代码作为一个 string

string.split("name=\"_csrf\" value=\"")[1].split("\"")[0];

[0-9-]+
tongyx 回复

6666666666666

s='''<html>
<input type="hidden" name="_csrf" value="12345678-1234-1234-1234-123456781234" />
</html>
'''

import re
print re.search(r'name="_csrf" value="(.+)"',s).group(1)

正则匹配呗

String str = "<input type=\"hidden\" name=\"_csrf\" value=\"12345678-1234-1234-1234-123456781234\" />";
String value = str.split(" ")[3].split("\"")[1];
System.out.println(value);

/name="_csrf" value="([\d-]+)"/

匿名 #11 · 2018年04月26日
s='<input type="hidden" name="_csrf" value="12345678-1234-1234-1234-123456781234" />'
value=s.split()[3][7:-1]

正则表达式搞定一切

用//定义正则的都是大神,像 10 楼

都是大神

r'1234[.]*1234'$

这个用 js 拿值不是最好么,为啥还要用正则呢?求解释?

  • 数据
  • 保养

这样的的 HTML 如何使用 selenium 定位啊?

除了正则,也可以用 lxml 解析

import lxml
from lxml import html


s='''<html>
 <input type="hidden" name="_csrf" value="12345678-1234-1234-1234-123456781234" />
</html>
 '''

doc = lxml.html.fromstring(s)
result = doc.xpath('//input[@name="_csrf"]')
if result:
  print(result[0].value)
else:
  print("no result")

码了下 答案在楼下

文本信息如下:

<html>
 <input type="hidden" name="_csrf" value="12345678-1234-1234-1234-123456781234" />
</html>
import os.path
import re

# 假设此文本文件在test_study目录下,且文件名为ceshi
text_log = os.path.dirname(os.path.abspath('.')) +'/test_study/ceshi'
#打开此文本
f = open(text_log)
#循环读取每一行
for line in f.readlines():
#判断某一行中是否存在name="_csrf"的
      if re.search('name="_csrf"',line):
 #若有,则正则提取该行固定长度的数字的值
           list = re.findall('[0-9].{35}',line)
#将list变成字符串形式
           print ''.join(list)

需要 登录 後方可回應,如果你還沒有帳號按這裡 注册