前言

总是三分钟热度的我折腾了一个可以每天自动截取指定网站页面并保存到Github的项目SiteHistory,感觉挺好(每次都这样)。

想知道YouTube今天的首页长啥样么?点此查看

想知道YouTube2017年8月31日的首页长啥样么?改天再点开

想为你的网站增加访客么?不要问我,我不知道。

那年那站那样

伴随着时间,记录着网站的历史

记录下网站现在的样子,待那年今日

那一年,那个网站,是那个样子

项目地址:https://github.com/yimogit/SiteHistory

技术栈

  1. .NET Core:.NET Core 是.NET Framework的新一代版本,具有跨平台 (Windows、Mac OSX、Linux) 能力的应用程序开发框架 (Application Framework)。
  2. Selenium:一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。结合phantomjs等驱动可以实现页面自动化。
  3. Github:一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名GitHub,又名GayHub
  4. Travis CI:采用yaml格式配置,简洁清新的开源持续集成构建项目。

我将其用来打包vue的纯工具站点metools,以及.net core程序(SiteHistory)

啥,还不会?戳这里→→使用travis-ci自动部署github上的项目

项目构建思路

  1. 运行程序,传入名称 网址 如:dotnet run baidu https://www.baidu.com
  2. 创建一个phanomjs无头浏览器: IWebDriver driver = new PhantomJSDriver();
  3. 在浏览器中打开传入网站:driver.Navigate().GoToUrl(sitePage);
  4. 执行js使其滚动到底部,触发懒加载,等待网页图片加载
  1. int waitTime=10;
  2. var myScript = @"var ymtimer=setInterval(function(){
  3. if (document.body.scrollHeight - 700 < document.body.scrollTop){
  4. window.scroll(0, document.body.scrollHeight)
  5. clearInterval(ymtimer);
  6. return;
  7. }
  8. window.scroll(0, document.body.scrollTop + 700)
  9. } ," + waitTime * 1000 / 10 + ");";
  10. //10s中从头部滚动到底部
  11. ((IJavaScriptExecutor)driver).ExecuteScript(myScript);
  12. //等待滚动完毕,图片也差不多能加载完闭
  13. System.Threading.Thread.Sleep(1200 * waitTime);
  1. 开始截图:((ITakesScreenshot)driver).GetScreenshot().SaveAsFile("baidu.com",ScreenshotImageFormat.Jpeg)
  2. 拼接文本写入Readme.MD,Index.html
  3. 关闭无头浏览器,程序结束driver.Quit()

项目文件预览

Program.cs加起来就一百多行代码,完整Program.cs代码请戳这里

程序运行

  1. 下载phantomjs,设置环境变量(Travis CI环境提供PhantomJS预装)
  2. 安装.net core2.0 SDK
  3. 执行命令:dotnet run 参数1[名称] 参数2[网页链接] 参数3[图片格式] 参数4[等待时间] 参数5[保存目录] 参数6[可以执行一些js]
    1. dotnet run baidu https://www.baidu.com/

      保存[https://www.baidu.com]页面的截图名称为[baidu.jpg]

    2. dotnet run baidu https://www.baidu.com/ png

      指定图片类型为png

    3. dotnet run baidu https://www.baidu.com/ jpg 20

      加载完毕后等待20s后截图(图片加载或网站速度过慢)

    4. dotnet run baidu https://www.baidu.com/ jpg 10 download-test

      下载的图片保存到download-test文件夹下

    5. 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环境变量配置图,具体戳此文章

  1. # 语言为scharp,系统为ubuntu14.04(代号trusty),.netcore 版本2.0
  2. # Travis CI提供 phantomjs预装
  3. language: csharp
  4. dist: trusty
  5. dotnet: 2.0.0
  6. # mono:latest Travis CI默认会安装mono,测试发现若不安装mono,Travis CI会在程序截图时报错
  7. # 打印组件版本
  8. before_install:
  9. - dotnet --version
  10. - phantomjs --version
  11. script:
  12. - dotnet restore
  13. - dotnet run ip http://1212.ip138.com/ic.asp png
  14. - dotnet run acfun http://www.acfun.cn/ jpg 20
  15. - dotnet run bilibili https://www.bilibili.com jpg 20
  16. - dotnet run youtube https://www.youtube.com jpg 20
  17. - dotnet run google https://www.google.com
  18. # 将截图提交到 ${P_BRANCH} 分支中(gh-pages)
  19. # export abc='date +%Y%m%d' 获取年月日
  20. # 脚本将根据时间创建新分支 `gh-pages_20170901`,并更新gh-pages分支
  21. #
  22. after_script:
  23. - cd download
  24. - git init
  25. - git config user.name "${U_NAME}"
  26. - git config user.email "${U_EMAIL}"
  27. - git add .
  28. - git commit -m "add imgs"
  29. - git remote add orginimgs "https://${GH_TOKEN}@${GH_REF}"
  30. - export current_date='date +%Y%m%d'
  31. - echo "current_date:$($current_date)"
  32. - git push --force --quiet orginimgs master:gh-pages
  33. - git push --force --quiet orginimgs master:gh-pages_$($current_date)
  34. branches:
  35. only:
  36. - master

总结

  1. 测试发现IP地址每次都会发生变化,引发无限遐想
  2. Linux下获取年月日字符串

    设置:export current_date='date +%Y%m%d'

    输出:echo "current_date:$($current_date)"
  3. .net core使用Selenium需要引入Nuget包为:CoreCompat.Selenium.WebDriver

配置中的变量按照此文章配置即可

亲测搭配travis-ci食用最佳,Fork之后,前往travis-ci配置即可 参阅文章:使用travis-ci自动部署github上的项目

欢迎分享值得记录的网站。

.NET Core+Selenium+Github+Travis CI => SiteHistory的更多相关文章

  1. github Travis CI 持续集成

    一个项目如何保证代码质量是开发中非常重要的环节,对于开源项目来说更是如此,因为开源项目要面对的是来自不同水平开发者提交的代码.所以围绕开源做持续集成(Continuous Integration)变得 ...

  2. 利用Travis CI 让你的github项目持续构建

    Travis CI 是目前新兴的开源持续集成构建项目,它与jenkins,GO的很明显的特别在于采用yaml格式,简洁清新独树一帜.目前大多数的github项目都已经移入到Travis CI的构建队列 ...

  3. 使用Travis CI自动部署Hexo到GitHub

    原文链接(转载请注明出处):使用Travis CI自动部署Hexo到GitHub 前言 使用 hexo + gitPages 搭建个人博客的人都知道,每当要发表一篇博文,第一步得手动使用 hexo g ...

  4. 使用Travis CI自动部署博客到github pages和coding pages

    每次换系统或换电脑之后重新部署博客总是很苦恼?想像jekyll那样,一次性部署完成后,以后本地不用安装环境直接 git push 就能生成博客?那推荐你应该使用使用 Travis CI了. 这篇文章我 ...

  5. 使用 Travis CI 自动部署 Hexo 站点至 GitHub Pages

    Hexo 与 GitHub Pages 安装配置请参考:Hexo 与 GitHub Pages 本文源码与生成的静态文件在同一项目下,源码在 source 分支,静态文件在 master 分支 新增 ...

  6. GitHub搭配使用Travis CI 进行自动构建服务

    Travis CI (Continuous Integration)持续集成服务 用处:自动监控软件仓库,可以在代码提交后立刻执行自动测试或构建 1.在Github自己的仓库根目录里添加.travis ...

  7. 博客 | 基于Travis CI实现Hexo在Github和Coding的同步自动化部署

    文章目录 完成Hexo主题安装和配置 基于Travis CI实现同步部署 参考内容 相关链接 待补充 完成Hexo主题安装和配置 如果您还没有安装Hexo环境,请参考Hexo文档安装,也给出这样两篇博 ...

  8. 利用Travis CI+GitHub实现持续集成和自动部署

    前言 如果你手动部署过项目,一定会深感持续集成的必要性,因为手动部署实在又繁琐又耗时,虽然部署流程基本固定,依然容易出错. 如果你很熟悉持续集成,一定会同意这样的观点:"使用它已经成为一种标 ...

  9. github pages与travis ci运作原理

    当说到自动部署的时候,我很反感那些一上来就balabala说怎么操作的博文文章,照着别人的做法有样学样,经常会因为与自己项目实际情况不符而出现各种问题. 比如说github和travis,首先应该搞明 ...

随机推荐

  1. Java 9 揭秘(12. Process API 更新)

    Tips 做一个终身学习的人. 在本章中,主要介绍以下内容: Process API是什么 如何创建本地进程 如何获取新进程的信息 如何获取当前进程的信息 如何获取所有系统进程的信息 如何设置创建,查 ...

  2. 如何给Ionic写一个cordova插件

    写一个cordova插件 之前由javaWeb转html5开发,由于面临新技术,遂在适应的过程中极为挣扎,不过还好~,这个过程也极为短暂:现如今面临一些较为复杂的需求还会有一丝丝头痛,却没有一开始那么 ...

  3. “玲珑杯”ACM比赛 Round #12 (D) 【矩阵快速幂的时间优化】

    //首先,感谢Q巨 题目链接 定义状态向量b[6] b[0]:三面临红色的蓝色三角形个数 b[1]:两面临红色且一面临空的蓝色三角形个数 b[2]:一面临红色且两面临空的蓝色三角形个数 b[3]:三面 ...

  4. href设置action绝对路径和相对路径

    绝对路径: 示例: <a href="<%=basePath %>account/list.action"></a> 注意:这里${basePa ...

  5. FillConsoleOutputAttribute 函数--指定区域填充控制台输出属性

    FillConsoleOutputAttribute函数 来源:https://msdn.microsoft.com/en-us/library/windows/desktop/ms682663(v= ...

  6. 自动生成proto Js语句

    在与后端的WebSocket通信时,前端要带一个proto文件是一个累赘的事情.首先是明显的曝光了协议实体对象,再一个浏览器客户端很容易会缓存该文件,新的协议更新可能导致客户端不能使用,另外在cdn服 ...

  7. Ubuntu下安装codeblocks

    ubuntu 16.04LTS 下Code::Blocks 16.01 安装 Code::Blocks 是一个开放源码的全功能的跨平台C/C++集成开发环境. Code::Blocks是开放源码软件. ...

  8. mybatis中的mapper接口文件以及example类的实例函数以及详解

    ##Example example = new ##Example(); example.setOrderByClause("字段名 ASC"); //升序排列,desc为降序排列 ...

  9. C语言程序设计进阶 翁恺 第4周编程练习

    第4周编程练习 查看帮助 返回 第4周编程练习 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业 ...

  10. Apache Kafka系列(二) 命令行工具(CLI)

    Apache Kafka命令行工具(Command Line Interface,CLI),下文简称CLI. 1. 启动Kafka 启动Kafka需要两步: 1.1. 启动ZooKeeper [roo ...