.net core 利用Selenium和PhantomJS后台生成EChart图片
1.引用
NuGet安装:
Selenium.Support
Selenium.WebDriver
Selenium.WebDriver.PhantomJS.CrossPlatform (分布Linux时把对应PhantomJS复制到发布目录)
2.后台打开的页面
@{
Layout = "/Views/Shared/Ordinary.cshtml";
ViewData["Title"] = "图表模版";
}
@section css{
<link href="@ViewBag.url/lib/bootstrap/dist/css/bootstrap.css" rel="stylesheet" />
}
<div id="chartmain" class="col-lg-12 col-sm-12" style="height:400px;width:600px;"></div>
<script src="@ViewBag.url/lib/jquery/dist/jquery.js"></script>
<script src="@ViewBag.url/js/echarts.min.js"></script>
<script type="text/javascript">
var time = [];
var nameArr = [
];
//指定图标的配置和数据
var option = {
title: {
text: 'chart'
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#6a7985'
}
}
},
toolbox: {//平铺、折叠、生成png图片
show: true,
feature: {
dataView: { readOnly: false },
magicType: { show: true, type: ['stack', 'tiled', 'line', 'bar'] },
restore: { show: true },
saveAsImage: { show: true }
}
},
xAxis: {
type: 'category',
boundaryGap: false,
splitLine: {
show: true,//是否显示网格线
},
name: "time"
},
yAxis: {
type: 'value',
axisLabel: {
formatter: '{value}'
},
name: "value",
splitLine: {
show: true,//是否显示网格线
}
},
series: [{
name: 'value',
type: 'line',
data: nameArr
}]
};
//初始化echarts实例
var myChart = echarts.init(document.getElementById('chartmain'));
//使用制定的配置项和数据显示图表
myChart.setOption(option);
function getTime(date) {
var Hours = date.getHours();//获取当前小时数(0-23)
var Minutes = date.getMinutes(); //获取当前分钟数(0-59)
var Seconds = date.getSeconds();//获取当前秒数(0-59)
var Milliseconds = date.getMilliseconds();//获取当前毫秒数(0-999)
return Hours + ":" + Minutes + ":" + Seconds
}
</script>
3.生成图片代码
PhantomJSDriverService pds = PhantomJSDriverService.CreateDefaultService(AppDomain.CurrentDomain.BaseDirectory.ToString());
var driver = new PhantomJSDriver(pds); var request = injection.GetHttpContext.HttpContext.Request;
StringBuilder url = new StringBuilder();
url.Append(request.Scheme);
url.Append("://");
url.Append(request.Host);
url.Append("/Business/Report/TemplateEChart");
driver.Navigate().GoToUrl(url.ToString());//打开链接
//执行js
((IJavaScriptExecutor)driver).ExecuteScript("myChart.setOption(" + JsonHelper.ObjectToJson(ff) + ");");
//截图保存
Screenshot screenshot = ((ITakesScreenshot)driver).GetScreenshot();
string mapPath = @hostingEnvironment.WebRootPath;
string imgPatht = "/report/tempImg";
string dirt = mapPath + imgPatht;
if (!Directory.Exists(dirt))
{
DirectoryInfo dirInfo = Directory.CreateDirectory(dirt);
}
string imgSrct = imgPatht + "/" + Guid.NewGuid().ToString() + ".png";
string fullPatht = mapPath + imgSrct;
screenshot.SaveAsFile(fullPatht, ScreenshotImageFormat.Png);
//退出
driver.Quit();
错误:Permission denied
解决方法:PhantomJS文件设置最高权限
错误:System.TypeInitializationException: The type initializer for 'Gdip' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'libgdiplus': The specified module could not be found.
解决方法:Linux安装 yum install libgdiplus
.net core 利用Selenium和PhantomJS后台生成EChart图片的更多相关文章
- 针对源代码和检查元素不一致的网页爬虫——利用Selenium、PhantomJS、bs4爬取12306的列车途径站信息
整个程序的核心难点在于上次豆瓣爬虫针对的是静态网页,源代码和检查元素内容相同:而在12306的查找搜索过程中,其网页发生变化(出现了查找到的数据),这个过程是动态的,使得我们在审查元素中能一一对应看到 ...
- 纯后台生成highcharts图片有哪些方法?
比如说,领导抛给你一个需求,把一些数据做成图表,每天通过邮件发送,让领导能在邮件中就看到图片,你会有什么思路呢?本人使用的是phantomjs这个神器,它的内核是WebKit引擎,不提供图形界面,只能 ...
- EF Core利用Scaffold从根据数据库生成代码
在EF6 之前的时代,如果需要从数据库中生成代码,是可以直接在界面上操作的,而到了EF Core的时代,操作方式又有更简便的方式了,我们只需要记住以下这条指令. Scaffold-DbContext ...
- PHP利用GD库绘图和生成验证码图片
首先得确定php.ini设置有没有打开GD扩展功能,測试例如以下 print_r(gd_info()); 假设有打印出内容例如以下,则说明GD功能有打开: Array ( [GD Version] = ...
- nodejs搭配phantomjs highcharts后台生成图表
简单分享一下,后台使用nodejs结合highcharts.phantomjs生成报表图片的方法.这主要应用在日报邮件. 主要参考以下资料: http://www.highcharts.com/com ...
- 利用Selenium和Browsermob批量嗅探下载Bilibili网站视频
Rerence: http://www.liuhao.me/2016/09/20/selenium_browsermob_sniff_bilibili_video/ 日常生活中,用电脑看视频是非常频繁 ...
- PYTHON 爬虫笔记十:利用selenium+PyQuery实现淘宝美食数据搜集并保存至MongeDB(实战项目三)
利用selenium+PyQuery实现淘宝美食数据搜集并保存至MongeDB 目标站点分析 淘宝页面信息很复杂的,含有各种请求参数和加密参数,如果直接请求或者分析Ajax请求的话会很繁琐.所以我们可 ...
- 利用Selenium自动化web测试
简介: Selenium 是一个没有正式指导手册的开源项目,这让测试人员的问题调查很费时间.本文为基于 Selenium 1.0(发布于 2009 年 6 月)的测试期间的常见问题提供最佳实践. 简介 ...
- 利用ThinkPHP搭建网站后台架构
记录一下ThinkPHP搭建网站后台.调整好样式等操作步骤 下载好ThinkPHP(3.2.3),解压后将核心文件夹ThinkPHP以及index.php等文件复制到网站根目录如下图 对index.p ...
随机推荐
- 小强的HTML5移动开发之路(33)—— jqMobi基础
一.什么是jqMobi jqMobi是由appMobi针对HTML5浏览器和移动设备开发的javascript框架,是个极快速的查询选择库,支持W3C查询. 版本 jqMobi源码最初在2012年1月 ...
- 几种tab切换尝试 原生js
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 【22.73%】【codeforces 606D】Lazy Student
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 利用WPF建立自己的3d gis软件(非axhost方式)(十二)SDK中的导航系统
原文:利用WPF建立自己的3d gis软件(非axhost方式)(十二)SDK中的导航系统 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew ...
- 【心情】CF
感觉CF上最后做出来的人数1500左右的题就是我的智商极限了. 去找那样的题练练吧.
- Delphi程序员如何找到高薪的工作?(赚不到钱,原因只有一个,就是他们没有被公司录取。Delphi必须要独自进行深入研究,才能精通,同时也不能自由性太强)
转帖自:http://www.tommstudio.com/ViewNews.aspx?ID=187http://hi.baidu.com/rarnu/blog/ 本文翻译自<美国优秀经理观念大 ...
- BS_OWNERDRAW风格的作用和例子(值得研究,待续)
TBitBtn就是一个例子: procedure TBitBtn.CreateParams(var Params: TCreateParams); begin inherited CreatePara ...
- Qt自定义密码框,先显示后隐藏(继承以后改写slot即可,即与哪个相近就改写哪个)good
现在很多应用在密码输入时,会先显示一段时间,大概几百毫秒,然后再变成星号或者圆点隐藏起来.这样做的好处是,可以让密码输入者看到自己输入的字符,同时又防止密码被偷窥.但是Qt自带的密码输入框,要么输入时 ...
- xshell/putty 连接 linux 虚拟机 connection failed 的解决方案
ubuntu 默认并没有安装 ssh 服务,如果通过 ssh(XShell/putty) 连接 ubuntu 虚拟机,则需要手动安装 ssh-server(ssh 分客户端和 openssh-clie ...
- JSON.parse(JSON.stringify()) 实现对对象的深度拷贝,从而互不影响
JSON.parse(JSON.stringify({"key": "value"})) 根据不包含引用对象的普通数组深拷贝得到启发,不拷贝引用对象,拷贝一个字 ...