var page = require('webpage').create(),
system = require('system'),
address,output,csvPath,nodePathFile,outOriginalimg,PCSPuserAgent;
var fs = require("fs");
if (system.args.length < 0) {
console.log('Usage: rasterize.js URL filename');
phantom.exit(1);
} else {
address = system.args[1];// ��ȁE�url
output=system.args[2];
csvPath=system.args[3];// �����csv
PCSPuserAgent=system.args[6];
console.log(PCSPuserAgent);
var BeforecsvPath=csvPath.replace('.csv','_1.csv');
var csvindex=0; nodePathFile=system.args[4];// ��ȁE�nodepath�ļ�
outOriginalimg=system.args[5];// ��ȡԭͼ if(PCSPuserAgent.indexOf("iPhone") > -1)
{
page.settings = {
userAgent:PCSPuserAgent,
javascriptEnabled: true,
loadImages: true
};
}
else
{
page.settings = {
javascriptEnabled: true,
loadImages: true
};
}
page.viewportSize = {width:414,height:30};
page.open(address, function (status) {
// fs.write('test.txt', "childNodes Num{_}Node Name{_}NodeIndexPath{_}Width{_}Height{_}x{_}y{_}Dispaly{_}ImgUrlOrBackImgUrl" + "\r\n", 'a');
if(fs.exists(csvPath))
{
fs.remove(csvPath);
}
window.setTimeout(function () {
VisiteHtmlDom("0",BeforecsvPath);
console.log("---------------------FS MOVE------------------------------");
fs.move(BeforecsvPath,csvPath);
}, 40000);
waitFor2(
function csvCreate()
{
if(fs.exists(csvPath)){
if(csvindex<5)
{ csvindex++;
console.log("csvindex Index:"+csvindex);
var csvPathNow=csvPath.replace('.csv','__'+csvindex.toString()+'.csv');
var BeforecsvPathNow=csvPathNow.replace('.csv','_1.csv');
if(fs.exists(csvPathNow))
{
fs.remove(csvPathNow);
}
console.log("csvindex:"+csvindex+","+"csvPathNow:"+csvPathNow+","+"BeforecsvPathNow:"+BeforecsvPathNow);
VisiteHtmlDom("0",BeforecsvPathNow);
fs.move(BeforecsvPathNow,csvPathNow); }
else
{
return true;
}
}
},
function csvCreate2()
{
console.log("-----------------csvPath2 END---------------");
}
);
waitFor(
function nodePathFileCheck()
{
if(!fs.exists(nodePathFile))
{
console.log('nodepathFile Not Find')
}
else
{
console.log("Find nodePathFile");
return true;
}
} ,
function heheda()
{
window.setTimeout(function () {
console.log("---------------------Capture Original Begin------------------------------");
var scrollheight=page.evaluate(function () {
return document.body.scrollHeight;
});
page.viewportSize = {width:414,height:scrollheight}; page.render(outOriginalimg);
console.log("---------------------Capture Begin------------------------------");
markCapture();
console.log("scrollheight:"+scrollheight);
window.setTimeout(function () {
page.render(output);
page.close();
console.log('render ok');
phantom.exit();
}, 10000);
}, 25000);
}
); });
}
function VisiteHtmlDom(nodePath,inputcsvPath) {
var nodeinfo = page.evaluate(function (str) {
var root = document.getElementsByTagName('html');
var htmlNode = root[0]; var xpathArr = str.split("/"); for (var i = 1; i < xpathArr.length; i++) { var index = parseInt(xpathArr[i]);
if((htmlNode.nodeName.indexOf("SCRIPT") > -1) || (htmlNode.nodeName.indexOf("NOSCRIPT") > -1)|| (htmlNode.nodeName.indexOf("HEAD") > -1))
{
htmlNode = htmlNode;
}
else if(htmlNode.nodeName.indexOf("IFRAME") > -1&&window.getComputedStyle(htmlNode).display!="none")
{
var iframdom = htmlNode.contentWindow.document; var roots = iframdom.getElementsByTagName('html');
htmlNode=roots[0];
} else
{
htmlNode = htmlNode.childNodes[index];
}
} if ((htmlNode.nodeName.indexOf("#text") > -1))
{
return htmlNode.childNodes.length + "{_}" + htmlNode.nodeName+ "{_}" + str+"{_}"+"{_}"+"{_}"+"{_}"+"{_}"+"{_}"+"{_}"+ ("{_}" + htmlNode.nodeValue||"").replace(/\r|\n/ig, ""); }
else if((htmlNode.nodeName.indexOf("SCRIPT") > -1) || (htmlNode.nodeName.indexOf("NOSCRIPT") > -1)|| (htmlNode.nodeName.indexOf("HEAD") > -1)|| (htmlNode.nodeName.indexOf("#comment") > -1))
{ return "0"+"{_}"+htmlNode.nodeName + "{_}" + str+"{_}"+"{_}"+"{_}"+"{_}"+"{_}"+"{_}"+"{_}"+"{_}";
}
else {
//
var bgImgUrl= htmlNode.style.getPropertyValue("background-image"); // var bgImgUrl=htmlNode.style.getPropertyValue("background-image").replace(/^(url)\(|\)/g, '');
if(bgImgUrl!=null)
bgImgUrl=bgImgUrl.replace(/^(url)\(|\)/g, ''); var width = window.getComputedStyle(htmlNode).width;
var height = window.getComputedStyle(htmlNode).height;
var left = window.getComputedStyle(htmlNode).left;
var top = window.getComputedStyle(htmlNode).top;
var display = window.getComputedStyle(htmlNode).display;
switch (htmlNode.nodeName) {
case "IMG":
var imgUrl = htmlNode.src; //ȡͼƬ�ĵ�ַ
return htmlNode.childNodes.length + "{_}" + htmlNode.nodeName + "{_}" + str + "{_}" + width + "{_}" + height + "{_}" + left + "{_}" + top + "{_}" + display + "{_}" + imgUrl+ "{_}"+ "{_}"; //img bgurl txt
break;
case "EMBED":
case "#COMMENT":
return htmlNode.childNodes.length + "{_}" +htmlNode.nodeName+"{_}" + str+"{_}"+"{_}"+"{_}"+"{_}"+"{_}"+"{_}"+"{_}"+"{_}";
break;
case "IFRAME":
var iframeUrl = htmlNode.src;
if(window.getComputedStyle(htmlNode).display!="none")
{
return "1" + "{_}" + htmlNode.nodeName + "{_}" + str + "{_}" + width + "{_}" + height + "{_}" + left + "{_}" + top + "{_}" + display + "{_}" + iframeUrl+ "{_}"+ "{_}"; //img bgurl txt
}
else
{
return "0" + "{_}" + htmlNode.nodeName + "{_}" + str + "{_}" + width + "{_}" + height + "{_}" + left + "{_}" + top + "{_}" + display + "{_}" + iframeUrl+ "{_}"+ "{_}"; //img bgurl txt
}
default:
return htmlNode.childNodes.length + "{_}" + htmlNode.nodeName + "{_}" + str + "{_}" + width + "{_}" + height + "{_}" + left + "{_}" + top + "{_}" + display + "{_}" +"{_}"+ bgImgUrl+"{_}";
break;
}
}
}, nodePath); console.log("create CSV");
fs.write(inputcsvPath, nodeinfo + "\r\n", 'a'); // if(!(nodeinfo.indexOf("undefined")>-1)) var childNodesCount = nodeinfo.split("{_}")[0].split("/")[0]; for (var childIndex = 0; childIndex < childNodesCount;childIndex++) { var childNodesPath = nodePath + "/" + childIndex.toString(); VisiteHtmlDom(childNodesPath,inputcsvPath); }
}
function markCapture()
{
var stream = fs.open(nodePathFile, 'r');
while(!stream.atEnd()) {
var line = stream.readLine();
page.evaluate(function (line) {
var root = document.getElementsByTagName('html');//��ȡdom
var htmlNode = root[0];
var xpathArr=line.split("/");
for(var i=1;i<xpathArr.length;i++)
{
var index=parseInt(xpathArr[i].substring(xpathArr[i].length - 3, 3));
htmlNode= htmlNode.childNodes[index];
if(htmlNode.nodeName.indexOf("IFRAME") > -1)
{
var iframdom = htmlNode.contentWindow.document;
var roots = iframdom.getElementsByTagName('html');
htmlNode=roots[0];
i++;
}
} if (htmlNode.nodeName.indexOf("text")>-1)
{
htmlNode.parentNode.style.boxSizing = "border-box";
htmlNode.parentNode.style.border = "5px solid #ff0000";
}
else
{
htmlNode.style.boxSizing = "border-box";
htmlNode.style.border = "5px solid #ff0000";
}
},line);
} stream.close();
}
function waitFor(testFx, onReady, timeOutMillis) {
var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 120000, //< Default Max Timout is 3m
start = new Date().getTime(),
condition = false,
interval = setInterval(function() {
if ( (new Date().getTime() - start < maxtimeOutMillis) && !condition ) {
// If not time-out yet and condition not yet fulfilled
condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()); //< defensive code
} else {
if(!condition) {
// If condition still not fulfilled (timeout but condition is 'false')
console.log("'waitFor()' timeout");
phantom.exit(1);
} else {
// Condition fulfilled (timeout and/or condition is 'true')
console.log("'waitFor()' finished in " + (new Date().getTime() - start) + "ms.");
typeof(onReady) === "string" ? eval(onReady) : onReady(); //< Do what it's supposed to do once the condition is fulfilled
clearInterval(interval); //< Stop this interval
}
}
}, 5000); //< repeat 5000ms
};
function waitFor2(testFx, onReady, timeOutMillis) {
var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 120000, //< Default Max Timout is 3m
start = new Date().getTime(),
condition = false,
interval = setInterval(function() {
if ( (new Date().getTime() - start < maxtimeOutMillis) && !condition ) {
// If not time-out yet and condition not yet fulfilled
condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()); //< defensive code
} else {
if(!condition) {
// If condition still not fulfilled (timeout but condition is 'false')
console.log("'waitFor()' timeout");
phantom.exit(1);
} else {
// Condition fulfilled (timeout and/or condition is 'true')
console.log("'waitFor()' finished in " + (new Date().getTime() - start) + "ms.");
if(condition)
{
typeof(onReady) === "string" ? eval(onReady) : onReady(); //< Do what it's supposed to do once the condition is fulfilled clearInterval(interval); //< Stop this interval
}
}
}
}, 5000); //< repeat 5000ms
};

  

web.js的更多相关文章

  1. git报错 error: cannot stat ‘'web/js': Permission denied

    切换分支时报错: error: cannot stat ‘'web/js': Permission denied 解决方法:退出编辑器.浏览器.资源管理器等,然后再切换就可以了.

  2. ERROR in index.web.js from UglifyJs

    使用weexpack构建weex应用时,npm run serve一直报这个错误 ERROR in index.web.js from UglifyJs Unexpected token: name ...

  3. 用weex create 创建app项目 报 ERROR in index.web.js from UglifyJs 错误!

    用weex create创建一个APP项目,安装依赖后运行报 这个是package.json index.web.js 在dist目录下是build时生成的. 上面的答案没有给大家细节,不好意思致歉下 ...

  4. web & js & touch & gesture

    web & js & touch & gesture 触摸 & 手势 https://caniuse.com/#feat=touch js https://develo ...

  5. TSGCTF-web Beginner's Web (js内置方法__defineSetter__)

    const fastify = require('fastify'); const nunjucks = require('nunjucks'); const crypto = require('cr ...

  6. Web Js 按键事件……Enter提交事件 Enter Js事件

    $(document).ready(function(){ document.onkeydown = function (event){ if (event.keyCode==13) //回车键的键值 ...

  7. Web Js推断键盘出发事件

      window.document.onkeydown = disableRefresh; function disableRefresh(evt){ evt = (evt) ? evt : wind ...

  8. Node.js实战(三)之第一个Web服务器

    这次的示例同样也可以说是HelloWorld,只不过不同的是这是web服务器示例. (1)编写web.js,内容如下: var http = require("http") fun ...

  9. React Native 项目运行在 Web 浏览器上面

    React Native 的出现,让前端工程师拥有了使用 JavaScript 编写原生 APP 的能力.相比之前的 Web app 来说,对于性能和用户体验提升了非常多. 但是 React Nati ...

随机推荐

  1. windows32位系统 安装MongoDB

    今天在win7 32位系统下安装 MongoDB 时,遇到了一堆坑,特此笔记. 一.下载MongoDB 打开官网下载地址:https://www.mongodb.com/download-center ...

  2. jQuery笔记(二)

    $()下的常用方法 addClass():添加样式 removeClass():删除样式 $('div').addClass('box2 box4'); $('div').removeClass('b ...

  3. php内置函数分析之str_pad()

    PHP_FUNCTION(str_pad) { /* Input arguments */ zend_string *input; /* Input string 输入字符串*/ zend_long ...

  4. laravel 登录后跳转原来浏览的页面

    方法 1.修改一下文件/vendor/laravel/framework/src/Illuminate/Foundation/Auth/RedirectsUsers.php 修改内容如下: 没有的加入 ...

  5. orcle 远程连接其他数据库 进行查询数据

    CREATE PUBLIC DATABASE LINK testlinkCONNECT TO hxka IDENTIFIED BY bjdscoalUSING '(DESCRIPTION =(ADDR ...

  6. 【bzoj5073】[Lydsy1710月赛]小A的咒语 后缀数组+倍增RMQ+贪心+dp

    题目描述 给出 $A$ 串和 $B$ 串,从 $A$ 串中选出至多 $x$ 个互不重合的段,使得它们按照原顺序拼接后能够得到 $B$ 串.求是否可行.多组数据. $T\le 10$ ,$|A|,|B| ...

  7. KD-Tree学习笔记

    参考:https://trinkle23897.github.io/pdf/K-D%20Tree.pdf KD-Tree是一种维护K维空间点的类似BST的数据结构.绝大多数时候只用来维护二维空间的点, ...

  8. 安装 oracle

    先下载3个东西:链接忘记了,大家自己找一下 1  ORA+11+G+R2+server+64bit+for+windows.iso  (oracle 安装文件) 2  PLSql 3  oracle6 ...

  9. Spring定时服务QuartZ

    在JavaEE系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等. 我们可以使用java.util.Timer结合java.util.TimerTask来完成这项工作, ...

  10. photoshop cc 2018破解补丁(pscc2018注册机) 附使用方法

    1.下载破解程序 破解文件自行到  http://www.ddooo.com/softdown/109954.htm 下载 博主可以到本博客的文件-->pscc2018zcj_109954.ra ...