Cześć.
Napisałem sobie sofcik, który używa headless-browser do sprawdzania nowych video na YT, nowych postów na forum, nowych wpisów na blogu itp.
Ogólnie chodzi o to, żebym nie robił tego ręcznie, informacja o nowościach pojawia się w konsoli.
Niektóry z Was na pewno znają ten problem... Pracujesz nad czymś trudniejszym, gapisz się w miniator, wytężasz mózgownice, po chwili już jesteś na YT, albo sprawdzasz pocztę, zamiast myśleć dalej nad problemem :-)
Ten skrypt pozbawia mnie praktycznie każdego pretekstu oderwania się od pracy.
Aby go odpalić musisz pobrać PhantomJS.
Kod:
var pages = [
{
url: 'http://www.youtube.com/user/HuskyStarcraft/videos',
loop: 900,
callback: function() {
var self = this
self.callbackFire = false
var result = self.evaluate(function(){
var newVideo = document.querySelector('.channel-videos-list li h3').title
var oldVideo = localStorage.getItem( location.href )
if ( newVideo === oldVideo ) {
return false
}
localStorage.setItem( location.href, newVideo )
return newVideo
})
if ( false !== result ) {
console.log( 'New Husky Video: '+ result )
}
setTimeout(function(){
self.callbackFire = true
// refresh page...
self.evaluate(function(){
location.reload( true )
})
}, self.loop * 1000)
}
},
{
url: 'http://www.youtube.com/user/HDstarcraft/videos',
loop: 900,
callback: function() {
var self = this
self.callbackFire = false
var result = self.evaluate(function(){
var newVideo = document.querySelector('.channel-videos-list li h3').title
var oldVideo = localStorage.getItem( location.href )
if ( newVideo === oldVideo ) {
return false
}
localStorage.setItem( location.href, newVideo )
return newVideo
})
if ( false !== result ) {
console.log( 'New HD Video: '+ result )
}
setTimeout(function(){
self.callbackFire = true
// refresh page...
self.evaluate(function(){
location.reload( true )
})
}, self.loop * 1000)
}
},
{
url: 'http://www.youtube.com/user/RayWilliamJohnson/videos',
loop: 900,
callback: function() {
var self = this
self.callbackFire = false
var result = self.evaluate(function(){
var newVideo = document.querySelector('.channel-videos-list li h3').title
var oldVideo = localStorage.getItem( location.href )
if ( newVideo === oldVideo ) {
return false
}
localStorage.setItem( location.href, newVideo )
return newVideo
})
if ( false !== result ) {
console.log( 'New RWJ Video: '+ result )
}
setTimeout(function(){
self.callbackFire = true
// refresh page...
self.evaluate(function(){
location.reload( true )
})
}, self.loop * 1000)
}
},
{
url: 'http://www.rybinski.eu/',
loop: 900,
callback: function() {
var self = this
self.callbackFire = false
var result = self.evaluate(function(){
var newPost = document.querySelector('#content-container div h2 a').childNodes[0].nodeValue
var oldPost = localStorage.getItem( location.href )
if ( newPost === oldPost ) {
return false
}
localStorage.setItem( location.href, newPost )
return newPost
})
if ( false !== result ) {
console.log( 'New Rybinski Post: '+ result )
}
setTimeout(function(){
self.callbackFire = true
// refresh page...
self.evaluate(function(){
location.reload( true )
})
}, self.loop * 1000)
}
}
]
for ( key in pages ) {
(function(args){
var page = require('webpage').create();
page.callback = args.callback
page.callbackFire = true
page.loop = pages[ key ].loop
page.onLoadFinished = function( result ){
if ( true !== page.callbackFire ) {
return false
}
var state = page.evaluate(function(){
return document.readyState
})
if ( 'complete' !== state ) {
setTimeout( page.onLoadFinished, 1000 )
}
else {
page.callback.call( page )
}
}
page.open( args.url )
})(pages[ key ])
}
Jeśli macie ciekawe przykłady wykorzystania headless-browser'ów, wrzucajcie do tego tematu.
Pozdro600