phantomjs 另类用法

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_21158419/article/details/51744653 这几天接到了一个数据采集的项目 通过对网站的前期分析得到以下内容1.网站本身采用.NET开发2.需抓取内容采用DES加密虽然得到了前端javascript的加解密算法,但大家也知道跨语言算法想要交互开发难度是相当大的。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_21158419/article/details/51744653

这几天接到了一个数据采集的项目 

通过对网站的前期分析得到以下内容

1.网站本身采用.NET开发

2.需抓取内容采用DES加密

虽然得到了前端javascript的加解密算法,但大家也知道跨语言算法想要交互开发难度是相当大的。原打算修改现有php DES算法进行匹配发现难度太大,费时费力。后突然想到是否可以在php中调用js脚本来处理,这也就是本文章重点了phantomjs。其实很简单 第一版本打开网页直接执行解码方法,但用这种方法处理速度会被拉慢,毕竟有个网页访问的过程,之后就想是否可以调用本地自己构造的网页来进行同等的处理呢,我在Windows上测试是可行的,暂未在liunx上进行测试。

首先构造本地网页非常简单,就是一个引用解码脚本的空html文档,名为Demo.html

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script type="text/javascript" src="webdes.js"></script>
</head>
<body>
</body>
</html>

然后开始写phantomjs处理脚本,名为Model.js

var page = require('webpage').create();
page.open('Demo.html', function (status) {
		if(status !== 'success' ){
		console.log('FAIL');
	}else{
		 var a = '{keys}';
		 var b = '{encrypt}';

		console.log(page.evaluate(function(c,d){
				return jsdecrypt(c,d);
			},a,b));
	}
    phantom.exit();
});
通过phantomjs的api page.evaluate来执行解密方法 ,原打算直接通过命令行直接传参数,发现无法成功,猜测因为加密字符串大小超过命令行最大字符长度。所以只能通过php读入js文件再进行替换了。

最后就是php部分

//模板数据替换
$str=file_get_contents("Model.js");//打开文件
$str=str_replace("{keys}",$a,$str);
$str=str_replace("{encrypt}",$b,$str);
file_put_contents("Decode.js",$str);//把替换的内容写到js文件中 
//解码操作
$command = "phantomjs Decode.js";  
print_r (passthru($command));  //因为输出内容为多行所以使用passthru方法

最后说明一下这种方法毕竟是调用第三方程序来处理,肯定比不上原生直接写算法要快,但速度还是可以接受的

我也就抛砖引玉一下,这个模板可以直接套用。




目录
相关文章
|
数据处理 Python
doccano数据标注平台搭建
基于阿里云服务器ESC示例,搭建doccano数据标注平台
|
机器学习/深度学习 人工智能 算法
人工智能与创造力:探索AI在艺术创作中的角色
【6月更文挑战第30天】本文深入探讨了人工智能(AI)如何在艺术领域内重新定义创造力的概念。通过分析AI技术在绘画、音乐和文学创作中的应用案例,我们揭示了AI不仅能够模仿传统艺术形式,还能开创全新艺术风格的可能性。文章还讨论了AI艺术对知识产权法的挑战,以及公众对于由机器创造的艺术作品的接受度问题。
Flowable流程的挂起与激活详解
Flowable流程的挂起与激活详解
704 1
|
关系型数据库 MySQL Shell
Mac安装Mysql(图文解说详细版)
Mac安装Mysql(图文解说详细版)
Mac安装Mysql(图文解说详细版)
|
前端开发 小程序 Java
|
网络协议 Linux 网络安全
Centos7中如何打开和关闭防火墙??CentOS 7以上默认使用firewall作为防火墙改为iptables
Centos7中如何打开和关闭防火墙??CentOS 7以上默认使用firewall作为防火墙改为iptables
|
Ubuntu Linux Shell
Linux Ubuntu配置Anaconda与Python的方法
vLinux Ubuntu配置Anaconda与Python的方法
147 1
|
关系型数据库 MySQL Linux
centos7 安装与卸载 Mysql 5.7.27(详细完整教程)
centos7 安装与卸载 Mysql 5.7.27(详细完整教程)
centos7 安装与卸载 Mysql 5.7.27(详细完整教程)

热门文章

最新文章