前言

总是三分钟热度的我折腾了一个可以每天自动截取指定网站页面并保存到Github的项目SiteHistory,感觉挺好(每次都这样 frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 25px; height: 26px;">)。
想知道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使其滚动到底部,触发懒加载,等待网页图片加载
    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);

  5. 开始截图:((ITakesScreenshot)driver).GetScreenshot().SaveAsFile("baidu.com",ScreenshotImageFormat.Jpeg)

  6. 拼接文本写入Readme.MD,Index.html

  7. 关闭无头浏览器,程序结束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的环境变量配置图,具体戳此文章

# 语言为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 --versionscript:- 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

总结

  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上的项目
欢迎分享值得记录的网站。

相关文章:

  • dotnet使用Selenium执行自动化任务

原文地址:http://www.cnblogs.com/morang/p/7455992.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

.NET Core+Selenium+Github+Travis CI =amp;gt; SiteHistory相关推荐

  1. Flutter GitHub Travis CI 搭建

    通过 Travis CI 连接 GitHub 上的 Flutter 项目, 实现持续集成: 代码扫描, 测试, 打包发布 release. Install Android SDK os: linuxl ...

  2. 【请收藏】自动化构建部署之Travis CI使用(GitHub/Travis CI/Vue)

    文章目录 CI/CD 工具 Travis CI 使用 1. 注册 2. 新建Github仓库 3. 创建vue项目 4. 配置Travis CI 5. 发布到GitHub pages Travis C ...

  3. travis ci_如何使用Travis CI和GitHub进行Web开发工作流程

    travis ci by Vijayabharathi Balasubramanian 通过Vijayabharathi Balasubramanian 如何使用Travis CI和GitHub进行W ...

  4. 持续集成与持续部署(三)——实现持续集成的效率工具对比之Jenkins、Travis CI、Circle CI和其他持续集成工具

    持续集成与持续部署(三)--实现持续集成的效率工具对比之Jenkins.Travis CI.Circle CI和其他持续集成工具 效率工具对比 点击查看效率工具 1. Jenkins Jenkins, ...

  5. 利用Travis CI 让你的github项目持续构建(Node.js为例)

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

  6. Travis CI + github + hexo 自动化部署

    Travis CI是目前新兴的开源持续集成构建项目,采用yaml格式,简洁清新独树一帜.目前大多数的github项目都已经移入到Travis CI的构建队列中.Travis-CI会同步你在GitHub ...

  7. gcr.io 国内源 —— 基于 Travis CI + GitHub + DockerHub + Google Cloud 实现自动定时同步 gcr.io 镜像到 DockerHub

    一.背景介绍 由于国内网络原因,gcr.io 仓库里的镜像是无法直接拉取到的,这给开发工作造成了极大的不便 本文介绍一种方法能够实现自动化地定期地将 gcr.io 仓库中的镜像同步到个人 Docker ...

  8. 持续集成与持续部署(五)01-TravisCI——使用简介-Travis CI 只支持 Github,提供的是持续集成服务 配置项目的.travis.yml文件

    持续集成与持续部署(五)01-TravisCI--使用简介-Travis CI 只支持 Github,提供的是持续集成服务 & 配置项目的.travis.yml文件 TravisCI 使用简介 ...

  9. 利用 Travis CI 把 Android 项目部署到 github

    博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 本文不涉及 CI 是什么以及优势等,不知道的还请自行 google,这里会手把手教你如何操作. 闲话少说,开始吧. 一共 ...

最新文章

  1. 项目3:(4)点到直线的距离以及夹角
  2. 基于动态代码生成技术的动态对象工厂
  3. Jquery tmpl模板中if条件有多个时的写法
  4. 海量特征按照缺失值null/NAN数量异同进行分组归类
  5. iframe嵌入页面白屏_封闭在家学网页制作!为页面嵌入PDF文件——零基础自学网页制作
  6. 小窍门解决大问题(组图)
  7. c++实验4—项目6输出星号图
  8. lambda表达式对比
  9. python压缩和读取.tar.bz2格式的压缩包
  10. python动态创建字典_如何在Python中创建动态命名字典?
  11. 写一个函数将传入的字符串转换成驼峰表示法
  12. OSChina 周三乱弹 —— 万众期待的拉黑功能
  13. Teclast/台电32G SM3267AC H27UDG8M2MTR 量产记录
  14. 微软drive服务器,OneDrive:微软云存储服务
  15. 单片机基础项目(上)
  16. matlab chan算法定位,求Chan算法解析
  17. android图片编辑加文字,图片编辑加字下载-图片编辑加字 安卓版v3.9.0.0406-PC6安卓网...
  18. 简易考试系统(java、头歌实验)
  19. H5接入微信公众号方法(超详细)
  20. Macbook电池优化的七种建议

热门文章

  1. ERROR (ClientException): Unexpected API Error
  2. android 蓝牙各种UUID(转载)
  3. MYSQL性能优化分享(分库分表)
  4. 实现DDD领域驱动设计: Part 1
  5. GRPC在网页前端的使用
  6. 【招聘(上海)】美团酒店招聘 .NET 高级开发
  7. FreeSql使用WithSql+ ToSQL 查询数据
  8. 幸运从来都只偏爱有准备的人——大龄码农的慌张日记
  9. ML.NET 示例:图像分类模型训练-首选API(基于原生TensorFlow迁移学习)
  10. 记一次 .NET WPF布草管理系统 挂死分析