使用 javascript 访问 HTML 响应的内容
Accessing contents of HTML response with javascript
我需要使用 frisby.js 和 javascript 自动执行一些 API 测试,但我无法访问 HTML 响应的某些数据,最可能的原因是响应不是 JSON 格式。
下面是我的代码
var frisby = require('frisby');
frisby.create('Get some information')
.get(someUrl)
.after(function (err, res, body) {
console.log(body);
})
.toss()
下面是console.log(body);
函数
的结果
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>MDpay default response template for web</title>
</head>
<body OnLoad="OnLoadEvent();" >
<form name="downloadForm"
action="https://someurl"
method="POST">
<input type="hidden"
name="PaReq"
value="eJxVUdtuwjAM/ZWKDyBJCWuLjCUuk8YDE2JMYk8opN6ogBTSdIK/X1LK2PISn5PYxz6G1c4STd9I15YQ5lRV6ouiIh92krgnZQdhMVrSGeGbbFWUBkWXd2Ngd+hTrN4p4xCUPo9nrygznkgOrIVwJDubIudc8HCA3Qgw6kg42m+V2W960828zOmwWVHlgDVPoMvaOHvFJPN6dwC1PeDOudOAMWABAHu0sKhDVPnkS5HjgtPc6Zyvx5PLm5YFlcXabd8/1TMfAgs/IFeOMOYi8d09RaI/4PFAJsAaHtQxqOJq+RH1eTf03jJwCkKjG+g3U/1lwLtpyegrZjLzvd8R0OVUGvI//ES/MeRUaYy8aLiBPYaYvARXtfN2xWkvTkUabG1wKFV4P0QqbrUCABYyWLsx1m7TR/+2/APkDqQg">
<input type="hidden"
name="TermUrl" value="https:someurl">
<input type="hidden"
name="MD"
value="402277:56F8FBC5FC36742423302C8EFF56C796E7B123FC61132EA2AD89A389A02C4093:4243:##100100000">
<!-- To support javascript unaware/disabled browsers -->
<div style="text-align: center;">
<img src="templates/preloader.gif"/><br/>
<noscript>
<center>Please click the submit button below.<br>
<input type="submit" name="submit" value="Submit"></center>
</noscript>
</div>
</form>
<SCRIPT LANGUAGE="Javascript" >
function OnLoadEvent() {
document.downloadForm.submit();
}
</SCRIPT>
</body>
</html>
我的问题是您是否知道一种方法来访问 value
的 PaReq
、TermUrl
和 MD
HTML 标签。
谢谢
我必须执行一些字符串操作才能获得这些值,下面是用于访问这些值的代码
var pareq = body.substr(body.search('name="PaReq"'),600);
pareq = pareq.substring(pareq.indexOf('value="')+7,pareq.indexOf('">'));
var termUrl = body.substr(body.search('name="TermUrl"'),200);
termUrl = termUrl.substring(termUrl.indexOf('value="')+7,termUrl.indexOf('">'));
var md = body.substr(body.search('name="MD"'),250);
md = md.substring(md.indexOf('value="')+7,md.indexOf('">'));
如果你有更好的方法解决这个问题,请告诉我,
谢谢!
创建一个'fake' DOM元素并设置为innerHTML,然后就可以像普通网页一样查询了。
var el = document.createElement('html');
el.innerHTML = '<input name="PaReq" value="foo">';
el.querySelector('input[name=PaReq]').value; // "foo"
如果您 运行 在 node.js 环境中进行测试,您还需要使用 jsdom
例如..参见 https://github.com/tmpvar/jsdom#passing-objects-to-scripts-inside-the-page 例如
我需要使用 frisby.js 和 javascript 自动执行一些 API 测试,但我无法访问 HTML 响应的某些数据,最可能的原因是响应不是 JSON 格式。
下面是我的代码
var frisby = require('frisby');
frisby.create('Get some information')
.get(someUrl)
.after(function (err, res, body) {
console.log(body);
})
.toss()
下面是console.log(body);
函数
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>MDpay default response template for web</title>
</head>
<body OnLoad="OnLoadEvent();" >
<form name="downloadForm"
action="https://someurl"
method="POST">
<input type="hidden"
name="PaReq"
value="eJxVUdtuwjAM/ZWKDyBJCWuLjCUuk8YDE2JMYk8opN6ogBTSdIK/X1LK2PISn5PYxz6G1c4STd9I15YQ5lRV6ouiIh92krgnZQdhMVrSGeGbbFWUBkWXd2Ngd+hTrN4p4xCUPo9nrygznkgOrIVwJDubIudc8HCA3Qgw6kg42m+V2W960828zOmwWVHlgDVPoMvaOHvFJPN6dwC1PeDOudOAMWABAHu0sKhDVPnkS5HjgtPc6Zyvx5PLm5YFlcXabd8/1TMfAgs/IFeOMOYi8d09RaI/4PFAJsAaHtQxqOJq+RH1eTf03jJwCkKjG+g3U/1lwLtpyegrZjLzvd8R0OVUGvI//ES/MeRUaYy8aLiBPYaYvARXtfN2xWkvTkUabG1wKFV4P0QqbrUCABYyWLsx1m7TR/+2/APkDqQg">
<input type="hidden"
name="TermUrl" value="https:someurl">
<input type="hidden"
name="MD"
value="402277:56F8FBC5FC36742423302C8EFF56C796E7B123FC61132EA2AD89A389A02C4093:4243:##100100000">
<!-- To support javascript unaware/disabled browsers -->
<div style="text-align: center;">
<img src="templates/preloader.gif"/><br/>
<noscript>
<center>Please click the submit button below.<br>
<input type="submit" name="submit" value="Submit"></center>
</noscript>
</div>
</form>
<SCRIPT LANGUAGE="Javascript" >
function OnLoadEvent() {
document.downloadForm.submit();
}
</SCRIPT>
</body>
</html>
我的问题是您是否知道一种方法来访问 value
的 PaReq
、TermUrl
和 MD
HTML 标签。
谢谢
我必须执行一些字符串操作才能获得这些值,下面是用于访问这些值的代码
var pareq = body.substr(body.search('name="PaReq"'),600);
pareq = pareq.substring(pareq.indexOf('value="')+7,pareq.indexOf('">'));
var termUrl = body.substr(body.search('name="TermUrl"'),200);
termUrl = termUrl.substring(termUrl.indexOf('value="')+7,termUrl.indexOf('">'));
var md = body.substr(body.search('name="MD"'),250);
md = md.substring(md.indexOf('value="')+7,md.indexOf('">'));
如果你有更好的方法解决这个问题,请告诉我, 谢谢!
创建一个'fake' DOM元素并设置为innerHTML,然后就可以像普通网页一样查询了。
var el = document.createElement('html');
el.innerHTML = '<input name="PaReq" value="foo">';
el.querySelector('input[name=PaReq]').value; // "foo"
如果您 运行 在 node.js 环境中进行测试,您还需要使用 jsdom
例如..参见 https://github.com/tmpvar/jsdom#passing-objects-to-scripts-inside-the-page 例如