一些网站动调用ajax等操作时,会通过JS,生成一个验证码(CheckID),后台进行比对,如果正常才能调用,这就需要我们能够直接把js的调码整理出来进行调用,这里只是关个例子来调用js的用法:
pycharm直接运行js代码,需要环境支持,首先要安装node.js,具体安装可参考https://blog.youkuaiyun.com/bestyellow/article/details/119820509,我们准备一段js代码:
console.log(GenCheckKey(8));
console.log(getGroupNum('6-15双,13-25单'));
//生成随机数
function GenCheckKey(nLen)
{
var Ret = "";
var Code = "0123456789";
for (var i = 0; i < nLen; i++)
{
var c = Code.charAt(Math.random() * (Code.length - 1)); // 随机获取字符
Ret += c;
}
return Ret;
}
//分解类似于6-15双,13-25单这样的数字为数组
function getGroupNum(nums)
{
var ret = [];
var t1 = nums.split(',');
for (var i = 0; i < t1.length; i++)
{
var fws = t1[i];
if (isNaN(fws))
{
var isd = 0; var iss = 0;
if (fws.indexOf('单') > 0) { isd = 1; fws = fws.replace('单', ""); } else if (fws.indexOf('双') > 0) { iss = 1; fws = fws.replace('双', ""); }
var zfw = fws.split('-');
if (zfw.length == 2)
{
if (!isNaN(zfw[0]) && !isNaN(zfw[1]))
{
var n1 = parseInt(zfw[0]);
var n2 = parseInt(zfw[1]);
for (var j = n1; j <= n2; j++)
{
if (isd == 0 && iss == 0 || isd == 1 && (j % 2) == 1 || iss == 1 && (j % 2) == 0)
{
ret[ret.length] = parseInt(j);
}
}
}
}
}
else
{
ret[ret.length] = parseInt(fws);
}
}
return ret;
}
保存文件demo3.js,然后node.js直接运行看代码是束正常
结果为:
注释掉
后我们新建一个 demo3.py文件:
#调用js运行测试
import execjs #需安装PyEexcjs
'加载本地js文件'
with open('demo3.js', 'r', encoding='utf-8') as f:
ctx = execjs.compile(f.read())
thenum = ctx.call('GenCheckKey', 8) # 调用函数,生成随机数,参数为长度
nums=ctx.call('getGroupNum','6-15双,18-25')
print("js生成的随机数为:"+thenum)
print("“6-15双,18-25”分解为:{}".format(nums))
运行前我们要先安装PyExecJS 结果最后运行demo3.py看结果和js测试调用的结果一样