.NET Core+Selenium+Github+Travis CI => SiteHistory

前言

总是三分钟热度的我折腾了一个可以每天自动截取指定网站页面并保存到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使其滚动到底部,触发懒加载,等待网页图片加载
  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);
  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环境变量配置图,具体戳此文章

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

总结

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黑泽君的专栏

day51_BOS项目_03

将上面的js文件引入所需要的jsp页面中,本例以index.jsp为例 /bos19/WebContent/WEB-INF/pages/common/inde...

9310
来自专栏大学生计算机视觉学习DeepLearning

2018最新win10 安装tensorflow1.4(GPU/CPU)+cuda8.0+cudnn8.0-v6 + keras 安装CUDA莫名失败 导入tensorflow失败报错问题解决

原文链接:https://www.cnblogs.com/DOMLX/p/9747019.html

81720
来自专栏琯琯博客

awesome-php

收集整理一些常用的PHP类库, 资源以及技巧. 以便在工作中迅速的查找所需… 这个列表中的内容有来自 awesome-php 的翻译, 有来自开发者周刊以及个人...

1.2K90
来自专栏FreeBuf

命令行下的“蒙面歌王”rundll32.exe

*本文原创作者:lcx,本文属FreeBuf原创奖励计划,未经许可禁止转载 ** 在Windows系统中,为了节省内存和实现代码重用,微软在Windows操作系...

29890
来自专栏菩提树下的杨过

老生常谈:利用Membership实现SSO(单点登录)

虽然有一些现成的第三方解决方案比如:OpenID,Passport,SpaceCard等都还不错,但是要么就是收费的(passport),要么就是有点用不习惯(...

22950
来自专栏拂晓风起

cocos2d-js 调试办法 断点调试 Android真机调试

24720
来自专栏烙馅饼喽的技术分享

IISExpress中文版的一个OOXX的问题,及其解决方法-_-

      刚看到有人说IIS7Express有下载,于是马上屁颠屁颠地跑去下载了一个,然后安装. 装完后发现,我擦,居然没有WIN7下的管理界面,汗一个,于是...

38670
来自专栏Danny的专栏

学习中遇到的小技巧 一(暂停更新)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

12720
来自专栏游戏杂谈

对Unity的Resources目录进行改名

项目用的是Unity5.5版本,开发的时候将相关的图集、预制对象资源都放在 Resources 目录下,而真机使用的是 StreamingAssets 目录下的...

17730
来自专栏逸鹏说道

NET跨平台:在Ubuntu下搭建ASP.NET 5开发环境

0x00 写在前面的废话 年底这段时间实在太忙了,各种事情都凑在这个时候,没时间去学习自己感兴趣的东西,所以博客也好就没写了。最近工作上有个小功能要做成Web应...

34130

扫码关注云+社区

领取腾讯云代金券