.NET Core+Selenium+Github+Travis CI =amp;gt; SiteHistory
前言
總是三分鐘熱度的我折騰了一個可以每天自動截取指定網(wǎng)站頁面并保存到Github的項目SiteHistory,感覺挺好(每次都這樣 frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 25px; height: 26px;">)。
想知道YouTube今天的首頁長啥樣么?點此查看
想知道YouTube2017年8月31日的首頁長啥樣么?改天再點開
想為你的網(wǎng)站增加訪客么?不要問我,我不知道。
那年那站那樣
伴隨著時間,記錄著網(wǎng)站的歷史
記錄下網(wǎng)站現(xiàn)在的樣子,待那年今日
那一年,那個網(wǎng)站,是那個樣子
項目地址:https://github.com/yimogit/SiteHistory
技術(shù)棧
.NET Core:.NET Core 是.NET Framework的新一代版本,具有跨平臺 (Windows、Mac OSX、Linux) 能力的應(yīng)用程序開發(fā)框架 (Application Framework)。
Selenium:一個用于Web應(yīng)用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。結(jié)合phantomjs等驅(qū)動可以實現(xiàn)頁面自動化。
Github:一個面向開源及私有軟件項目的托管平臺,因為只支持git 作為唯一的版本庫格式進行托管,故名GitHub,又名GayHub
Travis CI:采用yaml格式配置,簡潔清新的開源持續(xù)集成構(gòu)建項目。
我將其用來打包vue的純工具站點metools,以及.net core程序(SiteHistory)
啥,還不會?戳這里→→使用travis-ci自動部署github上的項目
項目構(gòu)建思路
運行程序,傳入名稱 網(wǎng)址 如:dotnet run baidu https://www.baidu.com
創(chuàng)建一個phanomjs無頭瀏覽器:?IWebDriver driver = new PhantomJSDriver();
在瀏覽器中打開傳入網(wǎng)站:driver.Navigate().GoToUrl(sitePage);
執(zhí)行js使其滾動到底部,觸發(fā)懶加載,等待網(wǎng)頁圖片加載
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
關(guān)閉無頭瀏覽器,程序結(jié)束driver.Quit()
項目文件預(yù)覽
Program.cs加起來就一百多行代碼,完整Program.cs代碼請戳這里
程序運行
下載phantomjs,設(shè)置環(huán)境變量(Travis CI環(huán)境提供PhantomJS預(yù)裝)
安裝.net core2.0 SDK
執(zhí)行命令:dotnet run 參數(shù)1[名稱] 參數(shù)2[網(wǎng)頁鏈接] 參數(shù)3[圖片格式] 參數(shù)4[等待時間] 參數(shù)5[保存目錄] 參數(shù)6[可以執(zhí)行一些js]
dotnet run baidu https://www.baidu.com/
保存[https://www.baidu.com]頁面的截圖名稱為[baidu.jpg]
dotnet run baidu https://www.baidu.com/ png
指定圖片類型為png
dotnet run baidu https://www.baidu.com/ jpg 20
加載完畢后等待20s后截圖(圖片加載或網(wǎng)站速度過慢)
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'
加載完畢后執(zhí)行一段js
使用Travis CI?時的?.travis.yml配置
若使用Travis CI 集成 ,要新增網(wǎng)站截圖項,則在travis.yml中script節(jié)點下添加命令即可
附Travis CI的環(huán)境變量配置圖,具體戳此文章
# 語言為scharp,系統(tǒng)為ubuntu14.04(代號trusty),.netcore 版本2.0 # Travis CI提供 phantomjs預(yù)裝 language: csharp dist: trusty dotnet: 2.0.0# mono:latest Travis CI默認(rèn)會安裝mono,測試發(fā)現(xiàn)若不安裝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' 獲取年月日 # 腳本將根據(jù)時間創(chuàng)建新分支 `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總結(jié)
測試發(fā)現(xiàn)IP地址每次都會發(fā)生變化,引發(fā)無限遐想~
Linux下獲取年月日字符串
設(shè)置: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上的項目
歡迎分享值得記錄的網(wǎng)站。
相關(guān)文章:?
dotnet使用Selenium執(zhí)行自動化任務(wù)
原文地址:http://www.cnblogs.com/morang/p/7455992.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的.NET Core+Selenium+Github+Travis CI =amp;gt; SiteHistory的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux+.NetCore+Nginx
- 下一篇: .NET Core 在程序集中集成Raz