从HTML文件中取出JS加密需要的参数,并调用js内的加密算法

背景,爬虫程序需要模拟登陆,账号密码是经js加密的,加密所需的参数需要从html页面中取出
import javax.script.Invocable;import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import javax.script.ScriptException;import java.io.*;import java.util.regex.Matcher;import java.util.regex.Pattern;

public class ScriptEngineTest {    public static void main(String[] args) throws IOException, ScriptException, NoSuchMethodException {        ScriptEngineManager manager = new ScriptEngineManager();        ScriptEngine engine = manager.getEngineByName("javascript");        String jsFileName = "src/main/resources/static/ss.js";        String htmlFileName = "src/main/resources/static/url.html";        Pattern pattern = Pattern.compile("\"10001\", \"\", \"(.*?)\"");        String htmldatas = readfile(htmlFileName);        String key = getkey(pattern, htmldatas);        System.out.println("Key=" + key);        FileReader reader = new FileReader(jsFileName);        engine.eval(reader);        if (engine instanceof Invocable) {            Invocable invoke = (Invocable) engine;            String c = (String) invoke.invokeFunction("find", "10001", key, "111111");            System.out.println("加密后:" + c);        }        reader.close();    }

    public static String readfile(String filePath) {        File file = new File(filePath);        InputStream input = null;        try {            input = new FileInputStream(file);        } catch (FileNotFoundException e) {            e.printStackTrace();        }        StringBuffer buffer = new StringBuffer();        byte[] bytes = new byte[1024];        try {            for (int n; (n = input.read(bytes)) != -1; ) {                buffer.append(new String(bytes, 0, n, "UTF-8"));            }        } catch (IOException e) {            e.printStackTrace();        }        return buffer.toString();    }

    public static String getkey(Pattern pattern, String htmldatas) {        Matcher matcher = pattern.matcher(htmldatas);        String htmldata = "";        String key = "";        if (matcher.find()) {            htmldata = matcher.group();            System.out.println("htmldata=" + htmldata);            String ss[] = htmldata.split(",");            key = ss[2].replace("\"","").trim();        }        return key;    }}

原文地址:https://www.cnblogs.com/jakin3130/p/10559425.html

时间: 2024-08-30 14:21:52

从HTML文件中取出JS加密需要的参数,并调用js内的加密算法的相关文章

init.rc文件中面启动c++程序,通过jni调用java实现

</pre><p>注:假设是自己的myself.jar包,还要修改例如以下:</p><p>target/product/core_base.mk PRODUCT_BOOT_JARS := core:myself</p><p></p><p>功能:手机开机后要写个标志位. 已有实现.就是收到开机广播后,启动服务读取bp中的标志位(java代码须要等待ril准备好).并把这个标志位写入到ap中(java代码调用c++

systemd:在service文件中给Exec传入多个参数

原问题是这样的: 答案是这样的: 此外在使用prometheus监控mongodb时需要安装prometheus-mongodb-exporter,过程中也发现这种用法: 看看service单元文件是怎么写的: cat /lib/systemd/system/prometheus-mongodb-exporter.service 内容如下: [Unit] Description=Prometheus exporter for MongoDB Documentation=https://githu

css文件中的样式类被覆盖,js文件中的变量未定义问题问题

Extjs控件中css样式表中的样式类部分被莫名其妙的覆盖 问题原因: 为什么呢? 因为在调用组件W的css样式时,我们自己写了css样式A,Ext组件又自带css样式B,A是我们用cls:'A'放进去.那么这个W到底是用两个样式重复的哪一个种呢? 这就要看css样式表的引入顺序了,如果先引入自己写的,再引入Ext自带的,那么浏览器先读自己写的css样式,然后再读Ext自带的样式.结果我们的自己写的css样式就被覆盖了. 解决办法: 这样就对了. js文件中的变量未定义问题 问题描述: read

Python 调用JS文件中的函数

1.安装PyExecJS第三方库 2.导入库:import execjs 3.调用JS文件中的方法 Passwd = execjs.compile(open(r"web.js").read().decode("utf-8")).call('loginHandle','steam') 语句解析,open后跟所执行的js文件位置,call后第一个单引号引起来的为所执行的js文件的某个function,第二个单引号是前面函数的参数这里为function loginHand

在VC程序中获得资源文件中定义的公司名称

今天想从自己定义的资源文件中取出公司名称, 百度了下发现全是关于从资源文件中取得版本号的办法, 还好微软的MSDN给了我答案, 为了以后方便自己和别人, 就把这个函数贴出来. 希望百度能优化一下自己的搜索算法, 搜出来的结果几乎都是重复的, 想用能搜出来的结果用不了.百度的这一毛病也映射出了中国网民的复制粘贴的"情结"特别严重, 都是原样复制, 其中的错误都不改一下. ///////////////////////////////////////////////////////////

将 mp3 等音乐资源以资源形式嵌入 exe 文件中

引用:http://www.easyx.cn/skills/View.aspx?id=6 本文讲解怎样将 mp3 等音乐资源以资源形式嵌入 exe 文件中,并通过 mciSendString 调用.嵌入 mp3 和嵌入图片略有不同,将图片嵌入到 exe 中,以及访问嵌入 exe 中的图片,请参考:http://www.easyx.cn/skills/View.aspx?id=6 [一.以资源文件形式嵌入 exe] 关于"资源文件"的介绍和"将 mp3 以资源形式嵌入 exe

powershell修改文件中某个字符串(-replace操作符)

使用-replace操作符 test.txt文件内容 1234hello worldaaa "hhh" fwdbz test.ps1脚本文件 $(Get-Content E:\demo\test.txt) | Foreach-Object {$_ -replace ("1234","5678")} | Foreach-Object {$_ -replace ("hello world","hello java&quo

Python代码调用JS函数

采集过程中,遇到了一个token是经过JS加密生成的,于是乎进行JS断点追踪,生成了完整的生成token值的JS函数文件. 这个JS函数需要在Python代码中调用,通过输入一个参数,然后会输出一个token值. 所需模块: pip install pyexecjs 注意:这里安装的模块叫:pyexecjs, 但是调用的时候的名字是:execjs 具体调用步骤: # -*- coding: utf-8 -*- import execjs def get_js(): # f = open("./.

关于js重名方法的先后调用问题

当js中方法重名时,最后引入的js会覆盖前面的引入的js(就是说会调用最后引入的js中的方法)详情参照(main1.js与white1.js 的b())但是,当最后一个js中存在语法上的错误时(也可以是本js文件中其他方法格式错误),会调用前面的js中方法.详情参照(main.js与white.js的a()) <!DOCTYPE html> <html lang="en"> <script src="js/main.js"><