这个是我最近碰到的一个问题,大家也可以当做练手哈。
我们的产品在登录前会从服务器获取到一个 csrf 值,这个值藏在登录页面的 html 代码中。在登录时这个值将作为参数一同提交到服务器上。
现在的问题就是我怎样从整个页面的 html 代码中准确找到这个值。
已知这段 html 的代码固定为
<input type="hidden" name="_csrf" value="12345678-1234-1234-1234-123456781234" />
前后的 html 代码都不确定,value 值每次随机生成,value 长度固定
如何把 value 中的值截取下来。
接下来,秀技的时候到了
第一次发布直接粘贴 html 代码还真的给隐藏了。。
document.getElementsByName("_csrf").value
string.split("name=\"_csrf\" value=\"")[1].split("\"")[0];
[0-9-]+
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-]+)"/
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)