.NET Core+Selenium+Github+Travis CI => SiteHistory
前言
总是三分钟热度的我折腾了一个可以每天自动截取指定网站页面并保存到Github的项目SiteHistory,感觉挺好(每次都这样
)。
想知道YouTube今天的首页长啥样么?点此查看
想知道YouTube2017年8月31日的首页长啥样么?改天再点开
想为你的网站增加访客么?不要问我,我不知道。
那年那站那样
伴随着时间,记录着网站的历史
记录下网站现在的样子,待那年今日
那一年,那个网站,是那个样子
项目地址:https://github.com/yimogit/SiteHistory
技术栈
.NET Core:.NET Core 是.NET Framework的新一代版本,具有跨平台 (Windows、Mac OSX、Linux) 能力的应用程序开发框架 (Application Framework)。Selenium:一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。结合phantomjs等驱动可以实现页面自动化。Github:一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名GitHub,又名GayHubTravis CI:采用yaml格式配置,简洁清新的开源持续集成构建项目。
我将其用来打包vue的纯工具站点
metools,以及.net core程序(SiteHistory)
啥,还不会?戳这里→→使用travis-ci自动部署github上的项目
项目构建思路
- 运行程序,传入名称 网址 如:
dotnet run baidu https://www.baidu.com - 创建一个phanomjs无头浏览器:
IWebDriver driver = new PhantomJSDriver(); - 在浏览器中打开传入网站:
driver.Navigate().GoToUrl(sitePage); - 执行js使其滚动到底部,触发懒加载,等待网页图片加载
int waitTime=10;
var myScript = @"var ymtimer=setInterval(function(){
if (document.body.scrollHeight - 700 < document.body.scrollTop){
window.scroll(0, document.body.scrollHeight)
clearInterval(ymtimer);
return;
}
window.scroll(0, document.body.scrollTop + 700)
} ," + waitTime * 1000 / 10 + ");";
//10s中从头部滚动到底部
((IJavaScriptExecutor)driver).ExecuteScript(myScript);
//等待滚动完毕,图片也差不多能加载完闭
System.Threading.Thread.Sleep(1200 * waitTime);
- 开始截图:
((ITakesScreenshot)driver).GetScreenshot().SaveAsFile("baidu.com",ScreenshotImageFormat.Jpeg) - 拼接文本写入Readme.MD,Index.html
- 关闭无头浏览器,程序结束
driver.Quit()
项目文件预览
Program.cs加起来就一百多行代码,完整Program.cs代码请戳这里
程序运行
- 下载phantomjs,设置环境变量(Travis CI环境提供PhantomJS预装)
- 安装.net core2.0 SDK
- 执行命令:
dotnet run 参数1[名称] 参数2[网页链接] 参数3[图片格式] 参数4[等待时间] 参数5[保存目录] 参数6[可以执行一些js]dotnet run baidu https://www.baidu.com/保存[https://www.baidu.com]页面的截图名称为[baidu.jpg]
dotnet run baidu https://www.baidu.com/ png
指定图片类型为
pngdotnet run baidu https://www.baidu.com/ jpg 20
加载完毕后等待20s后截图(图片加载或网站速度过慢)
dotnet run baidu https://www.baidu.com/ jpg 10 download-test
下载的图片保存到download-test文件夹下
dotnet run baidu https://www.baidu.com/ jpg 10 download-test "document.body.innerHTML='test'
加载完毕后执行一段js
使用Travis CI 时的 .travis.yml配置
若使用Travis CI 集成 ,要新增网站截图项,则在travis.yml中script节点下添加命令即可
附Travis CI的环境变量配置图,具体戳此文章
# 语言为scharp,系统为ubuntu14.04(代号trusty),.netcore 版本2.0
# Travis CI提供 phantomjs预装
language: csharp
dist: trusty
dotnet: 2.0.0
# mono:latest Travis CI默认会安装mono,测试发现若不安装mono,Travis CI会在程序截图时报错
# 打印组件版本
before_install:
- dotnet --version
- phantomjs --version
script:
- dotnet restore
- dotnet run ip http://1212.ip138.com/ic.asp png
- dotnet run acfun http://www.acfun.cn/ jpg 20
- dotnet run bilibili https://www.bilibili.com jpg 20
- dotnet run youtube https://www.youtube.com jpg 20
- dotnet run google https://www.google.com
# 将截图提交到 ${P_BRANCH} 分支中(gh-pages)
# export abc='date +%Y%m%d' 获取年月日
# 脚本将根据时间创建新分支 `gh-pages_20170901`,并更新gh-pages分支
#
after_script:
- cd download
- git init
- git config user.name "${U_NAME}"
- git config user.email "${U_EMAIL}"
- git add .
- git commit -m "add imgs"
- git remote add orginimgs "https://${GH_TOKEN}@${GH_REF}"
- export current_date='date +%Y%m%d'
- echo "current_date:$($current_date)"
- git push --force --quiet orginimgs master:gh-pages
- git push --force --quiet orginimgs master:gh-pages_$($current_date)
branches:
only:
- master
总结
- 测试发现IP地址每次都会发生变化,引发无限遐想
- Linux下获取年月日字符串
设置:export current_date='date +%Y%m%d'
输出:echo "current_date:$($current_date)" .net core使用Selenium需要引入Nuget包为:CoreCompat.Selenium.WebDriver
配置中的变量按照此文章配置即可
亲测搭配travis-ci食用最佳,Fork之后,前往travis-ci配置即可 参阅文章:使用travis-ci自动部署github上的项目
欢迎分享值得记录的网站。
.NET Core+Selenium+Github+Travis CI => SiteHistory的更多相关文章
- github Travis CI 持续集成
一个项目如何保证代码质量是开发中非常重要的环节,对于开源项目来说更是如此,因为开源项目要面对的是来自不同水平开发者提交的代码.所以围绕开源做持续集成(Continuous Integration)变得 ...
- 利用Travis CI 让你的github项目持续构建
Travis CI 是目前新兴的开源持续集成构建项目,它与jenkins,GO的很明显的特别在于采用yaml格式,简洁清新独树一帜.目前大多数的github项目都已经移入到Travis CI的构建队列 ...
- 使用Travis CI自动部署Hexo到GitHub
原文链接(转载请注明出处):使用Travis CI自动部署Hexo到GitHub 前言 使用 hexo + gitPages 搭建个人博客的人都知道,每当要发表一篇博文,第一步得手动使用 hexo g ...
- 使用Travis CI自动部署博客到github pages和coding pages
每次换系统或换电脑之后重新部署博客总是很苦恼?想像jekyll那样,一次性部署完成后,以后本地不用安装环境直接 git push 就能生成博客?那推荐你应该使用使用 Travis CI了. 这篇文章我 ...
- 使用 Travis CI 自动部署 Hexo 站点至 GitHub Pages
Hexo 与 GitHub Pages 安装配置请参考:Hexo 与 GitHub Pages 本文源码与生成的静态文件在同一项目下,源码在 source 分支,静态文件在 master 分支 新增 ...
- GitHub搭配使用Travis CI 进行自动构建服务
Travis CI (Continuous Integration)持续集成服务 用处:自动监控软件仓库,可以在代码提交后立刻执行自动测试或构建 1.在Github自己的仓库根目录里添加.travis ...
- 博客 | 基于Travis CI实现Hexo在Github和Coding的同步自动化部署
文章目录 完成Hexo主题安装和配置 基于Travis CI实现同步部署 参考内容 相关链接 待补充 完成Hexo主题安装和配置 如果您还没有安装Hexo环境,请参考Hexo文档安装,也给出这样两篇博 ...
- 利用Travis CI+GitHub实现持续集成和自动部署
前言 如果你手动部署过项目,一定会深感持续集成的必要性,因为手动部署实在又繁琐又耗时,虽然部署流程基本固定,依然容易出错. 如果你很熟悉持续集成,一定会同意这样的观点:"使用它已经成为一种标 ...
- github pages与travis ci运作原理
当说到自动部署的时候,我很反感那些一上来就balabala说怎么操作的博文文章,照着别人的做法有样学样,经常会因为与自己项目实际情况不符而出现各种问题. 比如说github和travis,首先应该搞明 ...
随机推荐
- docker~写个容器启动的bash脚本
回到目录 bash脚本在linux里就相当于win里的bat和cmd及ps脚本,可以把一般指令组织在一起,统一去执行,比如我有一些docker容器需要统一去启动,这时,你可以把它们写成一个bash脚本 ...
- [HNOI2006]超级英雄 网络流+二分版
刚学网络流的我这里有一道非常好的"网络流练手题"------[HNOI2006]超级英雄. 记得很久以前真的有这个节目来着,还是大兵主持的. 其实这是一道匈牙利板子大水题,但对于我 ...
- vc++MFC开发上位机程序
用vc++MFC开发过不少跟单片机通讯的上位机程序了.搞懂了MFC架构,开发还是很快的,与底层单片机程序通讯,可以用串口.usb.网络.短信形式.串口现在用的越来越少了,一般电脑跟单片机在一块,使用串 ...
- Unicode 与 Unicode Transformation Format(UTF,UTF-8 / UTF-16 / UTF-32)
ASCII(American Standard Code for Information Interchange):早期它使用7 bits来表示一个字符,总共表示27 = 128个字符:后来扩展到8 ...
- git for windows+TortoiseGit客户端的使用二
通常都是使用git协议方式来连接服务器,然后使用https方式的连接方法,是如何设置的: 先登录github服务器,获取远程服务器仓库: 在本地创建一个存放仓库的目录,然后使用tortoiseGit客 ...
- WebGIS中前端JS生成等值面方法探讨
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在之前的博文<WebGIS中等值面展示的相关方案简析&g ...
- MySQL之增_insert-replace
MySQL增删改查之增insert.replace 一.INSERT语句 带有values子句的insert语句,用于数据的增加 语法: INSERT [INTO] tbl_name[(col_nam ...
- 在django中集成ckeditor富文本
目前用的比较多的富文本插件有百度的ueditor.ckeditor.kindeditor等,其中ueditor和kindeditor比较美观,ckeditor的皮肤较少.但是ueditor加载较慢,k ...
- Thinkpad T450 Linux Mint(Ubuntu) 安装Nvidia显卡驱动
事件背景 前段时间从Ubuntu切换到了LinuxMint,想尝尝鲜. LinuxMint是基于Ubuntu改良的,放弃了Ubuntu的Unity界面,更加易用,更加适合我这样的小白人员.本文也适用于 ...
- Java入门——(6)集合
关键词:Collection接口.Map接口.Iterator接口.泛型.Collections工具类.Arrays工具类 一.集合概述 当数据多了需要存储,需要容器,而数据的个数 ...
)。
